用deflate算法实现GZIP解压

Implement GZIP decompression with deflate algorithm

我需要从 JavaScript 中解压缩 Base64 编码的 gzipdeflate 数据而不增加包的大小(这就是为什么我不能只使用 pako).我找到了一个不错的小型库,用于解压 deflate 数据,名为 UZIP

看起来 gzip 只是 deflate 加上 10 字节的 header 和 8 字节的页脚。保证数据没有任何损坏,也没有超过这十个字节的任何额外 headers。考虑到所有这些,我假设我可以只对数据进行 Base64 解码,将其转换为 Uint8Array,然后切掉 header 和页脚。

const data = // some Base64-encoded, gzipped string
const dataBytes = new Uint8Array(atob(data).split('').map(char => char.charCodeAt(0)));
const decompressed = UZIP.inflate(dataBytes.slice(10, -8));

此代码无限期挂起(可能是因为 UZIP 错误处理不当)。我尝试在 Node.js 和浏览器上使用 pakozlib,但都抱怨 header 无效。作为参考,从 Base64 解码后使用 zlib.gunzip,以及 运行 pako.inflate(自动检测压缩类型),都可以正确解压缩 gzip 数据。

是否可以从 gzip 字符串中提取原始 deflate 数据?如果没有,有没有可以同时解压gzipdeflate的轻量级库?

我发现 deflate 规范不包含头文件,但是 zlib 包含,并且许多库调用 zlib 解压 inflate,而调用 true [=19] =] inflateRaw。我将我的方法调用从 inflate 更改为 inflateRaw,它立即起作用。