在 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
。
我正在尝试使用 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
。