获取zlib流中读取的字节数

时间:2015-04-18 11:18:00

标签: javascript node.js stream zlib

我使用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

1 个答案:

答案 0 :(得分:1)

在调查了zlib解压缩模块中涉及的C ++和JavaScript文件后,我发现这些文件都删除了有关读取了多少数据的信息。由于JavaScript无法使用本地zlib流,因此无法获取有关消耗的字节数的信息。

我更改Zlib.prototype._transform以检查读取的字节数,并更新Zlib中包含所占字节数的成员。有了它,它就像一个魅力:stream.seek(inflater._consumed);

除了在我看来,使用zlib模块的当前布局无法做到这一点之外,这可能没什么帮助。