var util = require('util');
var ReadableStream = require('stream').Readable;
function MyReadStream() {
ReadableStream.call(this);
this._index = 0;
this._string = 'Hello World!';
}
util.inherits(MyReadStream, ReadableStream);
MyReadStream.prototype._read = function() {
var i = this._index++;
if (i == this._string.length) {
this.push(null);
this.pipe(process.stdout);
}
else {
var buf = new Buffer(this._string[i], 'utf8');
this.push(buf);
}
};
var readerInst = new MyReadStream();
readerInst.read();
==================================================================================================================================================================== =Почему nodejs читаемый поток пропускает первую букву?
Почему я получаю stdout 'ello World!' вместо «Hello World!»?
Но почему readerInst._read() получает «Hello World»? Спасибо . –
Потому что '.push()' вызывает '._read()' для вызова повторно до тех пор, пока не будет достигнут highWaterMark, чего никогда не произойдет, потому что длина строки намного меньше, чем значение по умолчанию highWaterMark. – mscdex
Но почему бы не 'readerInst._read()' вернуть первый символ так же, как 'readerInst.read()'? В чем разница между 'readerInst._read()' и 'readerInst.read()'? –