0

I have a node.js Buffer instance, where the buffer is a concatenation of sections, and each section has a 20 byte header followed by deflated data.

What I need is to read the deflated data using node.js, and know how many bytes the deflated sequence had so I can properly advance to the next buffer section. Something like this:

var zlib = require('zlib');
var sections = [];
// A variable named 'buffer' is declared pointing to the Buffer instance
// so I need to read the first section, then the second section etc.
buffer = buffer.slice(20); // skip the 20-byte header
zlib.inflate(buffer, function(err, inflatedData) {
  sections.push(inflatedData);
});
// How many bytes zlib readed from the buffer to
// create the 'inflatedData' instance?
// suppose the number of bytes read is pointed by the variable 'offset',
// then I could do this to read the next section:
buffer = buffer.slice(offset + 20);
zlib.inflate(buffer, function(err, inflatedData) {
  sections.push(inflatedData);
});
4

2 に答える 2

2

NodeJS のドキュメントは明確ではありません。を追加するだけ{ info: true }で、返されるオブジェクトは、圧縮解除されたデータを含むバッファーとエンジンを備えたオブジェクトになります。例えば:

const result = zlib.inflateRawSync(compressed, { info: true } as any) as any;
const bytesRead = result.engine.bytesWritten;  // "bytesWritten" is actually "compressedSize".

typescript を使用する場合は、@types/node@14 がまだこのオプションを指定していないため、"any" にキャストする必要があります。

于 2020-09-15T13:15:29.937 に答える
0
// How many bytes zlib readed from the buffer to
// create the 'inflatedData' instance?

回答:それらすべて。

buffer.slice(20)位置20からバッファの終わりまでになります。それがzlib.inflate()メソッドが取得したものなので、それが処理されたものです。

多分これは役に立つでしょう:https ://meta.stackexchange.com/questions/66377/what-is-the-xy-problem

混乱しているようです。あなたは実際に何をしようとしていますか?(つまり、どのような問題を解決しようとしていますか?)

于 2013-01-10T01:30:12.627 に答える