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