1

TZDecompressionStream用来解压压缩数据。有一个属性可以OnProgress: TNotifyEventTZDecompressionStream其中检查Position我的 DecompressionStream 的属性。它为我提供了未打包数据中的位置,但我现在不使用所有未打包数据的大小来估计进度。我只知道打包数据的大小。

有没有办法在输入(解包)数据中获取位置?

4

1 回答 1

3

TZDecompressionStream.Size给出解压后的数据大小,但您必须在开始从流中读取(解压)之前获取此值。如果您尝试在OnProgress事件处理程序中获取解包数据大小,您将收到EZDecompressionError消息“缓冲区错误”的异常。


发生此错误是因为TStream.Sizegetter 通过Seek 向前执行到流的末尾然后Seek 向后执行到保存的位置来检索大小。由于参见类描述第 3 段的单向性,不支持后一种操作。在开始实际解压缩操作之前检索大小是可能的,因为允许作为一种特殊情况,这有效地将解码器重置为初始状态。TZDecompressionStreamSeek(0, soFromBeginning)

于 2013-11-13T13:42:42.953 回答