在 JavaScript 中混合使用 zlib 和 fflate 进行压缩?

Mixing zlib and fflate for compression in JavaScript?

我正在尝试使用 fflate 解压缩由 zlib

压缩的数据

数据是使用 zlib 流压缩的,如果我使用 zlib 将数据膨胀回来,它就可以工作。

import Zlib from 'zlib';

const gz = Zlib.createGzip({
   flush: Zlib.constants.Z_FINISH,
});
gz.on('error', function(err){    console.log(err.stack);   });
gz.pipe(out, { end: false });
gz.end(Buffer.from(JSON.stringify(msg)))

但是,我想使用 fflate 来膨胀数据(稍后我会在客户端上做,但为了测试我在同一个脚本中做)。

import { unzlibSync, strFromU8 } from 'fflate';

var uint8array = toUni8Array(dataFromStream);    
const dd = strFromU8(unzlibSync(uint8array))
console.log(dd.toString())

上面的代码在从 zlib 传递数据时抛出 invalid zlib data 错误,但适用于 fflate.

编码的数据

所以底线是:如果我使用同一个库对数据进行编码和解码,一切正常,但两个库的组合不起作用。

是否需要任何特定配置才能让它们协同工作?

unzlibSync 几乎肯定在寻找 zlib 流,但您给它的是 gzip 流。请改用 gunzipSync