極端な圧縮レベルでzlibを使用してNode.jsのバッファーを圧縮する必要があります。出力されるヘッダーは78DAである必要があります。何かが足りない場合を除いて、Node.jsのドキュメントには、zlib.Deflateクラスの使用方法が実際には説明されていません。パラメータを受け入れません。
質問する
7899 次
1 に答える
10
zlib.
createGzip
/を使用createDeflate
して、オブジェクト内のオプションとともに、必要なコンプレッサーのインスタンスを取得します。
これをすべてメモリ内で実行する場合:
var zlib = require('zlib');
// create a new gzip object
var gzip = zlib.createGzip({
level: 9 // maximum compression
}), buffers=[], nread=0;
// attach event handlers...
gzip.on('error', function(err) {
gzip.removeAllListeners();
gzip=null;
});
gzip.on('data', function(chunk) {
buffers.push(chunk);
nread += chunk.length;
});
gzip.on('end', function() {
var buffer;
switch (buffers.length) {
case 0: // no data. return empty buffer
buffer = new Buffer(0);
break;
case 1: // only one chunk of data. return it.
buffer = buffers[0];
break;
default: // concatenate the chunks of data into a single buffer.
buffer = new Buffer(nread);
var n = 0;
buffers.forEach(function(b) {
var l = b.length;
b.copy(buffer, n, 0, l);
n += l;
});
break;
}
gzip.removeAllListeners();
gzip=null;
// do something with `buffer` here!
});
// and finally, give it data to compress
gzip.write(inputBuffer);
gzip.end();
もちろん、大量のデータを処理している場合は、すべてをメモリにバッファリングするのではなく、出力をファイルにストリーミングします。
于 2012-09-17T21:58:43.650 に答える