我TZDecompressionStream用来解压压缩数据。有一个属性可以OnProgress: TNotifyEvent在TZDecompressionStream其中检查Position我的 DecompressionStream 的属性。它为我提供了未打包数据中的位置,但我现在不使用所有未打包数据的大小来估计进度。我只知道打包数据的大小。
有没有办法在输入(解包)数据中获取位置?
我TZDecompressionStream用来解压压缩数据。有一个属性可以OnProgress: TNotifyEvent在TZDecompressionStream其中检查Position我的 DecompressionStream 的属性。它为我提供了未打包数据中的位置,但我现在不使用所有未打包数据的大小来估计进度。我只知道打包数据的大小。
有没有办法在输入(解包)数据中获取位置?
TZDecompressionStream.Size给出解压后的数据大小,但您必须在开始从流中读取(解压)之前获取此值。如果您尝试在OnProgress事件处理程序中获取解包数据大小,您将收到EZDecompressionError消息“缓冲区错误”的异常。
发生此错误是因为TStream.Sizegetter 通过Seek 向前执行到流的末尾然后Seek 向后执行到保存的位置来检索大小。由于参见类描述第 3 段的单向性,不支持后一种操作。在开始实际解压缩操作之前检索大小是可能的,因为允许作为一种特殊情况,这有效地将解码器重置为初始状态。TZDecompressionStreamSeek(0, soFromBeginning)