उपयोग 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 (बफर) उस केस स्टेटमेंट से सरल होना चाहिए। – gluxon
@gluxon: यह सही है। हालांकि, नोड 0.8 तक 'Buffer.concat' मौजूद नहीं था। आपको पुराने संस्करणों पर इसे इस तरह से करना है। (मैंने मूल रूप से 0.8 से पहले इस कोड को लिखा था) – josh3736
हां, मैं कुछ महीनों के बाद नोड की बेहतर समझ के साथ इस पर वापस देख रहा था। मुझे इस समाधान के लिए धन्यवाद देना है। :) – gluxon