获取在 zlib 流中读取的字节数

Getting number of bytes read in zlib stream

我正在使用 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));

我检查了读取前后充气器的所有成员,但没有任何变化,除了读取缓冲区(带有解压缩数据)之外的每个值都是相同的。有没有办法确定从压缩缓冲区读取了多少字节?

提前谢谢你,克罗蒙

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

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

除了在我看来不可能用 zlib 模块的当前布局执行此操作外,这可能没有太大帮助。