【发布时间】:2023-05-04 03:48:01
【问题描述】:
我正在使用 Software Inflate 方法(原始 deflate 方法而不是 GZIP/ZLIB 变体)进行解压缩操作。
奇怪的是,我注意到以下观察结果
1.) 当我传入一个压缩缓冲区(avail_in 和 next_in 字段)作为源数据和一个目标缓冲区(avail_out 和 next_out)作为解压缩输出时,膨胀解压操作成功,Z_STREAM_END 为正状态。我还将它与原始未压缩数据及其匹配项进行了比较。
2.) 但是,当我将压缩数据拆分为两个缓冲区时,1 个缓冲区的压缩数据减去一个字节(压缩数据大小 -1),第二个缓冲区的大小为 1 字节,单个目标缓冲区的大小与原始缓冲区相同未压缩长度,膨胀解压操作成功,Z_OK 正状态填充了我的完整目标缓冲区(avail_out = 0 和 total_out = 原始未压缩大小)。我还将它与原始未压缩数据及其匹配项进行了比较。
我对为什么 inflate() 操作成功生成所有原始数据而不处理第二个源缓冲区感到非常困惑。?这是膨胀操作的预期行为吗?
3.) 我还尝试了上述 2 种方法,将源数据拆分为 2 个缓冲区,其中最后一个缓冲区的长度为 2 个字节,1 个源缓冲区大小是压缩数据 -2 和单个目标缓冲区。看到与2.
【问题讨论】:
标签: c compression deflate inflate