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