2012-09-17 13 views
6

मुझे अत्यधिक संपीड़न स्तर पर zlib के साथ Node.js में एक बफर को संपीड़ित करने की आवश्यकता है। आउटपुट हेडर 78 डीए होना चाहिए। जब तक मुझे कुछ याद नहीं आ रहा है, तो Node.js दस्तावेज़ वास्तव में वर्णन नहीं करता है कि zlib.Deflate क्लास का उपयोग कैसे करें। यह किसी भी पैरामीटर को स्वीकार नहीं करता है।विकल्पों के साथ Node.js zlib मॉड्यूल का उपयोग कैसे करें?

http://nodejs.org/api/zlib.html#zlib_class_zlib_deflate

उत्तर

5

उपयोग 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(); 
बेशक

, यदि आप डेटा की बड़ी मात्रा के साथ काम कर रहे हैं, बल्कि स्मृति में सब कुछ बफरिंग की तुलना में एक फाइल करने के लिए उत्पादन स्ट्रीम।

+0

Buffer.concat (बफर) उस केस स्टेटमेंट से सरल होना चाहिए। – gluxon

+1

@gluxon: यह सही है। हालांकि, नोड 0.8 तक 'Buffer.concat' मौजूद नहीं था। आपको पुराने संस्करणों पर इसे इस तरह से करना है। (मैंने मूल रूप से 0.8 से पहले इस कोड को लिखा था) – josh3736

+0

हां, मैं कुछ महीनों के बाद नोड की बेहतर समझ के साथ इस पर वापस देख रहा था। मुझे इस समाधान के लिए धन्यवाद देना है। :) – gluxon

संबंधित मुद्दे