नोट, मैं यहां पढ़ने के लिए सक्षम होने की नकल करने के लिए एक अंतराल का उपयोग कर रहा हूं। अगर लेखक झूठे रिटर्न आप राज्य को अपडेट करेंगे बफरिंग आदि मुझे लगता है कि अंतिम पंक्ति क्या आप यानी चाहते
r.pipe(b).pipe(w);
इस रूप में
readStrem.pipe(transformBbuffer).pipe(writeStream);
इस प्रकार पढ़ता है शुरू करने के लिए आप यह किसी भी तरह आप यानी चाहते हैं कर सकते हैं
उदाहरण कोड, कुछ डेटा हैं जो हम सभी डेटा बफर करने के लिए कर सकते हैं। मैं कोड के बाद वर्णन करूंगा। आप जो कुछ भी धाराओं के बारे में पता करने की जरूरत है और अधिक डॉक्स में कर रहे हैं, मुझे लगता है कि वे और अधिक पूर्ण उदाहरण के साथ कर सकता है, लेकिन वे के रूप में बहुत अच्छा कर रहे हैं ...
https://nodejs.org/api/stream.html#stream_class_stream_transform_1
इस कोड।
var fs = require('fs');
var stream = require('stream')
const util = require('util');
//const StringDecoder = require('string_decoder').StringDecoder;
const Transform = require('stream').Transform;
var check_buff = 0;
var DRAIN_ME = 0;
var r = fs.createReadStream('file1.txt').setEncoding('utf8');
var w = fs.createWriteStream('file2.txt');
var BufferStream = function() {
stream.Transform.apply(this, arguments);
this.buffer = [];
};
util.inherits(BufferStream, stream.Transform);
var intId;
intId = setInterval(function(){
if(check_buff % 3 == 0) {
DRAIN_ME = 1;
return;
}
DRAIN_ME = 0;
},10);
BufferStream.prototype._transform = function (chunk, encoding, done) {
this.buffer.push(String(chunk));
while(DRAIN_ME > 0 && this.buffer.length > 0) {
this.push(this.buffer.shift());
}
console.log(chunk.length);
console.log(this.buffer.length);
done();
};
var b = new BufferStream();
b.on('end', function(chunk) {
clearInterval(intId);
});
r.pipe(b).pipe(w);
मैं एक बदलने लागू करने के लिए विहित तरीका रहा हूँ/ धारा, कि सभी डेटा बफ़र्स जब तक पाइप उस पर कॉल है के माध्यम से।
परीक्षण करने के लिए यह एक बनाने बनाओ निम्न परिवर्तन
BufferStream.prototype._transform = function (chunk, encoding, done) {
this.buffer.push(String(chunk));
console.log(chunk.length);
console.log(this.buffer.length);
done();
};
......
BufferStream.prototype._flush = function (cb) {
var len = this.buffer.length;
for (var i = 0; i < len; i++) {
this.push(this.buffer.shift());
};
cb();
};
तुम भी पठनीय धारा बीच प्रभावी लिखने योग्य धारा को रोक देगा रोक सकते हैं, क्योंकि यह डेटा यानी प्राप्त करने बंद हो जाता है ... डिस्क पर काफी बड़ी फ़ाइल यानी 100 एमबी या उससे अधिक और इसे चलाएं ...
var fs = require('fs');
var readableStream = fs.createReadStream('file1.txt');
var writableStream = fs.createWriteStream('file2.txt');
readableStream.setEncoding('utf8');
readableStream.on('data', function(chunk) {
var ready = 0;
readableStream.pause();
setInterval(function(){
if(ready == 0) {
//console.log('pausing');
readableStream.pause();
ready = 1;
}
else {
//console.log('resuming');
readableStream.resume();
ready = 0;
}
},100);
writableStream.write(chunk);
});
तत्काल विराम का कारण है क्योंकि उस समय तक अंतराल ने 10ms
निकाल दिया है, फ़ाइल पहले से ही लिखी जा सकती है। इस पर भिन्नताएं हैं यानी ...
var fs = require('fs');
var readableStream = fs.createReadStream('file1.txt');
var writableStream = fs.createWriteStream('file2.txt');
readableStream.setEncoding('utf8');
var ready = 0;
setInterval(function(){
if(ready == 0) {
//console.log('pausing');
readableStream.pause();
ready = 1;
}
else {
//console.log('resuming');
readableStream.resume();
ready = 0;
}
},100);
readableStream.on('data', function(chunk) {
writableStream.write(chunk);
readableStream.pause();
});
स्वीकार किए जाते हैं जवाब की तरह लग रहा है यहाँ मैं http://stackoverflow.com/questions/20317759/implementing-a-buffered-transform-stream –