猿问

如何用zlib解压缩gzip流?

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


如何使用zlib解压缩gzip文件?


30秒到达战场
浏览 1716回答 3
3回答

跃然一笑

要使用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。

富国沪深

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
随时随地看视频慕课网APP
我要回答