为什么我不能使用zlib解压缩字符串,如gzip的样式

时间:2011-05-04 07:09:04

标签: python gzip zlib

我知道这里有许多关于在python中使用zlib或gzip模块解压缩数据的问题和答案。但我很好奇gzip如何实现它,因为gzip基于zlib 我读了gzip的源代码,发现它使用zlib来解压缩数据块,并将wbits设置为-15。
但是当我直接使用带有wbits -15的zlib进行解压缩时,它告诉我“无效块类型”,只有wbits 15 + 16它才能工作。

我知道为什么我应该使用15 + 16,但是我不知道为什么gzip可以使用-15但我不能。 谁知道我的和gzip模块之间的实现差异?

1 个答案:

答案 0 :(得分:2)

zlib模块直接将wbits参数传递给实际的zlib库。它被称为windowBits,并记录在zlib manual中。让我引用相关部分:

  

windowBits也可以是-8 ..- 15用于原始收缩。在这种情况下,-windowBits确定窗口大小。然后deflate()将生成没有zlib头或尾部的原始deflate数据,并且不会计算adler32检查值。

由于gzip模块执行头解析和生成本身,因此需要告诉zlib避免它。否则会有两个zlib头和一个损坏的压缩文件。