Ich sah mir diese hübsche geschickte Abschnitt Beispiele auf Streams.Node Readable Stream Leiden
https://gist.github.com/joyrexus/10026630
Das Beispiel für lesbare sieht aus wie so:
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);
was mich wirklich verwirrt, ist, dass der Punkt der Ströme ist nicht alles auf einmal im Speicher zu puffern, sowie, um etwas Asynchronität zu liefern, so dass nicht alles über das Piping eines Streams in derselben Runde der Ereignisschleife verarbeitet wird.
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');
Aber was ich nicht verstehe ist, wie soll ich die Lesemethode auf lesbar implementieren?
Es scheint, als würde ich komplett anders gelesen als das Beispiel lesen, also scheint etwas aus zu sein.
Wie lese ich Daten mit einem lesbaren Stream manuell ein?