这是MizardX答案的附加组件,提供了一些说明和背景。
参见http://www.chiramattel.com/george/blog/2007/09/09/deflatestream-block-
length-does-not-
match.html
根据RFC 1950,以默认方式构造的zlib流包括:
- 2字节的标头(例如0x78 0x9C)
- 放气流-参见RFC 1951
- 未压缩数据的Adler-32校验和(4个字节)
C#
DeflateStream在放气流上工作(您猜对了)。MizardX的代码告诉zlib模块数据是原始的deflate流。
观察结果:(1)有人希望C#的“放气”方法产生更长的字符串仅在输入短时才会发生(2)是否使用未使用Adler-32校验和的原始放气流?有点冒险,除非用更好的东西代替。
更新
错误信息Block length does not match with its complement
如果您尝试使用C#充入一些压缩数据
DeflateStream并收到该消息,则很有可能将其提供给zlib流,而不是deflate流。
请参阅如何在文件的一部分上使用DeflateStream?
还将错误消息复制/粘贴到Google搜索中,您将获得无数次点击(包括此答案前面的几则),说的差不多。
Deflater
“网站”使用 的Java … C#DeflateStream“非常简单,并且已经针对Java实现进行了测试”。网站正在使用以下哪些可能的Java
Deflater构造函数?
public Deflater(int level, boolean nowrap)使用指定的压缩级别创建一个新的压缩器。如果’nowrap’为true,则将不使用ZLIB标头和校验和字段以支持在GZIP和PKZIP中使用的压缩格式。
public Deflater(int level)使用指定的压缩级别创建一个新的压缩器。压缩数据将以ZLIB格式生成。
public Deflater()使用默认压缩级别创建一个新的压缩器。压缩数据将以ZLIB格式生成。
*丢弃2字节的zlib标头和4字节的校验和后 *的单行压缩器 :
uncompressed_string.enpre('zlib')[2:-4] # does not work in Python 3.x要么
zlib.compress(uncompressed_string)[2:-4]



