为什么nodejs的可读流跳过第一个字母


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();

==============================================

为什么我得到stdout 'ello World!,而不是"Hello World!"?

发生的事情是readerInst.read()(它要求任意数量的字节)导致_read()被执行,因为还没有数据可读,所以_read()将第一个字符推入流,然后由readerInst.read()返回。在调用结束后,字符串的其余部分被推入流,当到达字符串的末尾时,内容通过管道传输/写入stdout,它只会显示从第二个字母开始的字符串。

您可以通过记录readerInst.read()的返回值来验证这是否发生。

相关内容

  • 没有找到相关文章

最新更新