ストリームの例のこのかなり素敵なセクションを見ていました。ノード読み込み可能なストリームの惨事
https://gist.github.com/joyrexus/10026630
そうのような読みやすいルックスのための例:本当に私を混乱させる何
var Readable = require('stream').Readable
var inherits = require('util').inherits
function Source(content, options) {
Readable.call(this, options)
this.content = content
}
inherits(Source, Readable)
Source.prototype._read = function (size) {
if (!this.content) this.push(null)
else {
this.push(this.content.slice(0, size))
this.content = this.content.slice(size)
}
}
var s = new Source("The quick brown fox jumps over the lazy dog.")
console.log(s.read(10).toString())
console.log(s.read(10).toString())
console.log(s.read(10).toString())
console.log(s.read(10).toString())
console.log(s.read(10).toString())
// The quick
// brown fox
// jumps over
// the lazy
// dog.
var q = new Source("How now brown cow?")
q.pipe(process.stdout);
は、ストリームのポイントは、がが一度にメモリにすべてをバッファリングすることではないということですストリームをパイプすることに関するすべてがイベントループの同じターンで処理されるわけではないように、いくつかの非同期性を提供するためにがあります。
const writable = new stream.Writable({
write: function(chunk, encoding, cb){
console.log('data =>', String(chunk));
cb();
}
});
var readable = new stream.Readable({
read: function(size){
// what do I do with this? It's required to implement
}
});
readable.setEncoding('utf8');
readable.on('data', (chunk) => {
console.log('got %d bytes of data', chunk.length, String(chunk));
});
readable.pipe(writable);
readable.push('line1');
readable.push('line2');
readable.push('line3');
readable.push('line4');
しかし、私が理解できないことは、どのようにして読み込み可能な方法で実装するのでしょうか?
私は完全に違った例を読んで実装するようですが、何かが外れているようです。
読み取り可能なストリームでデータを手動で読み込むにはどうすればよいですか?