我正在尝试使用以下方法解压缩 gzip 数据Inflater
。根据文档,
如果参数“nowrap”为 true,则 ZLIB 标头和校验和
字段将不会被使用。这提供了与
GZIP 和 PKZIP 使用的压缩格式。
注意:使用“nowrap”选项时,还需要提供
一个额外的“虚拟”字节作为输入。这是 ZLIB 本机所需要的
库以支持某些优化。
Passing true
到构造函数,然后尝试解压缩数据结果DataFormatException: invalid block type
被抛出。按照中的说明进行操作这个答案 https://stackoverflow.com/a/9779941/783547,我在末尾添加了一个虚拟字节setInput()
的参数,无济于事。
我必须使用GZIPInputStream
反而?我究竟做错了什么?
Java 文档不正确或至少具有误导性:
nowrap - 如果为 true 则支持 GZIP 兼容压缩
nowrap 的意思是原始 deflate 数据将被解压缩。 gzip 流是用 gzip 标头和标尾包裹的原始 deflate 数据。要使用此类完全解码 gzip 格式,您需要按照中所述处理 gzip 标头RFC 1952 https://www.rfc-editor.org/rfc/rfc1952,使用 inflater 解压原始 deflate 数据,计算crc32 http://docs.oracle.com/javase/1.4.2/docs/api/java/util/zip/CRC32.html使用该类的未压缩数据,然后再次按照 gzip 预告片中的指定验证 crc 和长度(模 2^32)RFC https://www.rfc-editor.org/rfc/rfc1952.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)