为什么我不能像gzip一样使用zlib来解压字符串?

3
我知道这里有许多关于如何在Python中使用zlib或gzip模块来解压数据的问题和答案。但我对gzip是如何实现这一点很好奇,因为gzip基于zlib。
我查看了gzip的源代码,并发现它使用zlib以wbits设为-15的方式按块解压数据。
然而,当我直接使用wbits设为-15的zlib解压数据时,它告诉我“无效的块类型”,只有wbits为15 + 16才能正常工作。

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

1个回答

2

zlib模块直接将wbits参数传递给实际的zlib库。在那里,它被称为windowBits,并在zlib手册中有详细说明。让我引用相关部分:

对于原始压缩(raw deflate), windowBits也可以是-8到-15。 在这种情况下,-windowBits决定窗口大小。deflate()将生成没有zlib标头或尾部的原始压缩数据,并且不会计算adler32校验值。

由于gzip模块自己进行头部解析和生成,因此需要告诉zlib避免此操作。否则将会出现两个zlib头文件和一个损坏的压缩文件。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接