为了账号安全,请及时绑定邮箱和手机立即绑定

如何用zlib解压缩gzip流?

如何用zlib解压缩gzip流?

Gzip格式文件(gzip例如,使用程序创建)使用“deflate”压缩算法,该算法与zlib使用的压缩算法相同。但是,当使用zlib来膨胀gzip压缩文件时,库会返回一个Z_DATA_ERROR。如何使用zlib解压缩gzip文件?
查看完整描述

3 回答

?
跃然一笑

TA贡献1826条经验 获得超6个赞

要使用zlib解压缩gzip格式文件,请inflateInit2使用windowBits参数调用16+MAX_WBITS,如下所示:

inflateInit2(&stream, 16+MAX_WBITS);

如果你不这样做,zlib会抱怨一个糟糕的流格式。默认情况下,zlib使用zlib标头创建流,并且在inflate不会识别不同的gzip标头,除非您这样说。虽然从头文件的1.2.1版开始记录了这一点zlib.h,但它不在zlib手册中。从头文件:

windowBits对于可选的gzip解码,也可以大于15。添加32以windowBits使用自动标头检测启用zlib和gzip解码,或添加16以仅解码gzip格式(zlib格式将返回a Z_DATA_ERROR)。如果正在解码gzip流,strm->adler则是crc32而不是adler32。


查看完整回答
反对 回复 2019-09-19
?
富国沪深

TA贡献1790条经验 获得超9个赞

Node.js的


const { gunzip } = require('zlib');


const decompressGzip = compressedData =>

  new Promise((resolve, reject) => {

    gunzip(compressedData, (error, decompressedData) => {

      if (error) return reject(error);

      return resolve(decompressedData);

    });

  });


module.exports = { decompressGzip };

你zlib用纱线安装


yarn add zlib


查看完整回答
反对 回复 2019-09-19
  • 3 回答
  • 0 关注
  • 1715 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信