问题描述
我对下面的程序很好奇,该程序仅在消费者要求时才将字母'a'到'z'(包括在内)推送到可读流中。我从文档中了解到_read()
实现是由内部Readable
类方法调用的。如果您使用命令node app.js | head -c5
从终端运行此程序,则可以看到_read()
仅在请求5个字节时才被调用5次,因此它仅打印abcde
。
我想知道此_read()
实现在Node源代码中的什么位置?还是当我们请求5个字节的数据时,在节点源代码_read()
中被调用5次?
我很好奇知道这一点,如果有人可以帮助我找出答案,那将是很棒的。
var Readable = require('stream').Readable;
var rs = Readable();
var c = 97 - 1;
rs._read = function () {
if (c >= 'z'.charCodeAt(0)) return rs.push(null);
setTimeout(function () {
rs.push(String.fromCharCode(++c));
},100);
};
rs.pipe(process.stdout);
process.on('exit',function () {
console.error('\n_read() called ' + (c - 97) + ' times');
});
process.stdout.on('error',process.exit);