6
我需要在極端壓縮級別使用zlib壓縮Node.js中的緩衝區。輸出的標題應該是78 DA。除非我錯過了一些東西,否則Node.js文檔並沒有真正描述如何使用zlib.Deflate類。它不接受任何參數。如何使用帶有選項的Node.js zlib模塊?
http://nodejs.org/api/zlib.html#zlib_class_zlib_deflate
我需要在極端壓縮級別使用zlib壓縮Node.js中的緩衝區。輸出的標題應該是78 DA。除非我錯過了一些東西,否則Node.js文檔並沒有真正描述如何使用zlib.Deflate類。它不接受任何參數。如何使用帶有選項的Node.js zlib模塊?
http://nodejs.org/api/zlib.html#zlib_class_zlib_deflate
使用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();
當然,如果你正在處理大量的數據,流輸出到一個文件,而不是緩存在內存中的一切。
Buffer.concat(buffers)應該比case語句更簡單。 – gluxon
@gluxon:是的。但是,在節點0.8之前'Buffer.concat'不存在。你必須在舊版本上這樣做。 (我最初在0.8之前編寫了這個代碼) – josh3736
是的,幾個月後,我更好地理解了Node,回顧了這一點。我必須感謝你的解決方案。 :) – gluxon