我正在使用zlib.Inflate
来膨胀数据块。我现在遇到的问题是,我只知道有多少字节的未压缩数据,而不是压缩流中有多少字节。我目前只是将整个输入缓冲区写入膨胀器,然后从中读取未压缩的字节量。这给了我正确的输出数据,但我必须知道消耗了多少字节才能继续解析剩余数据。
所以现在我做了以下测试:
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));
我在读取之前和之后检查了膨胀的所有成员,但没有任何变化,除了读取缓冲区(带有解压缩的数据)之外的每个值都是相同的。有没有办法确定从压缩缓冲区读取了多少字节?
提前谢谢你,克罗蒙
在调查了 zlib 解压缩模块中涉及的 C++ 和 JavaScript 文件后,我意识到这些文件都删除了有关读取了多少数据的信息。由于本机zlib
流对 JavaScript 不可用,因此无法获取有关消耗的字节量的信息。
我更改了Zlib.prototype._transform
以检查读取了多少字节,并更新了Zlib
中保存所用字节数的成员。有了它,它就像一个魅力:stream.seek(inflater._consumed);
这可能没有太大帮助,除了在我看来,使用 zlib 模块的当前布局不可能做到这一点。