我使用zlib.Inflate
来膨胀一大块数据。我现在遇到的问题是,我所知道的是有多少字节的未压缩数据,但没有压缩流中有多少字节。我目前只是将整个输入缓冲区写入inflater,然后从中读取未压缩的字节数。这给了我正确的输出数据,但我必须知道继续解析剩余数据所消耗的字节数。
所以现在我做了以下测试:
var inflater = zlib.createInflate();
inflater.write(strm.buffer.slice(strm.position));
inflater.on("readable", (function(inflater, len) {
return function() {
console.log(inflater);
var decompData = inflater.read(len);
console.log(inflater);
var output = fs.createWriteStream("output.bin");
output.write(decompData);
}
})(inflater, len));
我在读取之前和之后检查了inflater的所有成员但没有任何变化,除了读取缓冲区(带有解压缩数据)之外的每个值都是相同的。有没有办法确定从压缩缓冲区中读取了多少字节?
提前谢谢你,Cromon
答案 0 :(得分:1)
在调查了zlib解压缩模块中涉及的C ++和JavaScript文件后,我发现这些文件都删除了有关读取了多少数据的信息。由于JavaScript无法使用本地zlib
流,因此无法获取有关消耗的字节数的信息。
我更改Zlib.prototype._transform
以检查读取的字节数,并更新Zlib
中包含所占字节数的成员。有了它,它就像一个魅力:stream.seek(inflater._consumed);
除了在我看来,使用zlib模块的当前布局无法做到这一点之外,这可能没什么帮助。