Javascript 可读流类的read方法返回的默认字节数是多少?

Javascript 可读流类的read方法返回的默认字节数是多少?,javascript,node.js,file,io,stream,Javascript,Node.js,File,Io,Stream,下面的代码段从文件创建一个可读的流,然后侦听readable事件以开始从流接收数据 const rstream = fs.createReadStream(this.getFileName(), { encoding: "utf8" }); /** * Reference: https://nodejs.org/api/stream.html#stream_readable_streams * * Adding a 'rea

下面的代码段从文件创建一个可读的流,然后侦听
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个字节吗

它是否总是从新行返回令牌,或者可能是部分结果

不,它不会总是返回整行。你必须准备好获得一个部分行。如果需要逐行结果,可以使用,它将处理部分结果缓冲,并且只在有整行时告诉您

从流返回的默认字节数是多少?它是如何工作的

流使用内部缓冲区(您可以对其进行控制)。对
.read()
的调用是非阻塞的。它将返回缓冲区中的字节数,最多为您要求的字节数。但是,如果缓冲区中没有太多字节,特别是当您在接近缓冲区末尾读取时,您绝对可以在流从文件接收到下一组字节之前获得部分结果

因此,对于第一次读取时准备的字节数,没有自动的“默认”值。这取决于一系列的时间考虑因素,包括自打开流以来经过了多少时间、何时读取、驱动器的速度以及系统上CPU和I/O的争用程度。如果您有一段时间不读取,则流应该填充其内部缓冲区。如果您立即阅读,它可能还没有将任何或大部分内容放入缓冲区

这是否意味着块大小将不小于64*1024字节

不,这意味着块大小不会大于这个值。对于可读流,highWaterMark确定流在实际
read()
调用之前缓冲的最大数据量。一旦流填满该缓冲区,它就会自动停止读取,直到您从内部缓冲区中读取部分数据为止

它是否总是从新行返回令牌,或者可能是部分结果

不,它不会总是返回整行。你必须准备好获得一个部分行。如果需要逐行结果,可以使用,它将处理部分结果缓冲,并且只在有整行时告诉您

从流返回的默认字节数是多少?它是如何工作的

流使用内部缓冲区(您可以对其进行控制)。对
.read()
的调用是非阻塞的。它将返回缓冲区中的字节数,最多为您要求的字节数。但是,如果缓冲区中没有太多字节,特别是当您在接近缓冲区末尾读取时,您绝对可以在流从文件接收到下一组字节之前获得部分结果

因此,对于第一次读取时准备的字节数,没有自动的“默认”值。这取决于一系列的时间考虑因素,包括自打开流以来经过了多少时间、何时读取、驱动器的速度以及系统上CPU和I/O的争用程度。如果您有一段时间不读取,则流应该填充其内部缓冲区。如果您立即阅读,它可能还没有将任何或大部分内容放入缓冲区

这是否意味着块大小将不小于64*1024字节

不,这意味着块大小不会大于这个值。对于可读流,highWaterMark确定流在实际
read()
调用之前缓冲的最大数据量。一旦流填满该缓冲区,它就会自动停止读取,直到您从内部缓冲区中读取部分数据为止