【发布时间】:2020-08-06 05:37:49
【问题描述】:
下面的 sn -p 从文件中创建一个可读流,然后监听readable 事件开始从流中接收数据。
const rstream = fs.createReadStream(this.getFileName(), {
encoding: "utf8"
});
/**
* Reference: https://nodejs.org/api/stream.html#stream_readable_streams
*
* Adding a 'readable' event handler automatically make the stream to stop flowing,
* and the data to be consumed via readable.read().
*/
rstream.on("readable", () => {
let data;
while(data = rstream.read()) {
console.log(data, " *");
}
});
read 函数接受 size 参数,该参数是从读取流中读取的最大字节数。从流返回的默认字节数是多少,或者它是如何工作的?例如,如果我的文件有换行符分隔的标记,它是否总是从新行返回标记,或者可能是部分结果,其中一些标记来自新行,最后一个结果只有 2 个来自新行的字符?
更新:
我还阅读了一个选项highWaterMark,它可能定义了缓冲流的块大小。这是如何运作的。我尝试了以下方法:
const rstream = fs.createReadStream(this.getFileName(), {
encoding: "utf8",
highWaterMark: 64 * 1024
});
这是否意味着块大小将不小于64 * 1024 字节?当我尝试读取highWaterMark 的上述配置文件时,程序第一次读取8 字节,下一次读取大约11 个字节,文件大小为19 个字节。它不应该一次读取完整的 19 个字节吗?
【问题讨论】:
标签: javascript node.js file io stream