块(缓冲区)从节点js中的文件(文本文件)进入ReadStreaming的数据量?

时间:2018-05-06 01:47:32

标签: node.js streaming

是否可以从节点js中的文件(文本文件)中知道块(缓冲区)在ReadStreaming中携带的数据量?

我创建了一个ReadStream并以块的形式显示了文本文件的数据,但是有可能找到缓冲区可能有的数据量吗?

var myReadStream = fs.createReadStream( __dirname + '/readme.txt', 'utf8');

myReadStream.on('data', function(chunk){

    console.log('new chunk received');
    console.log(chunk);

1 个答案:

答案 0 :(得分:0)

  

是否可以从节点js中的文件(文本文件)中知道块(缓冲区)在ReadStreaming中携带的数据量?

是的,在您的示例中,chunk.length将是数据块中的数据量。

您无法控制块长度。您必须编码data事件发生时最终的任何内容。这就是流的工作方式。给定块的大小取决于发送的数据量,取决于传输(慢速传输更可能为您提供较小的块)以及流中的最大缓冲区大小。

您可以使用highWaterMark选项in the doc创建流时控制流中的最大缓冲区大小。

var myReadStream = fs.createReadStream( __dirname + '/readme.txt', 'utf8', { highWaterMark: 60000 });

但是将其设置为更大的值只能获得更大的块。它并不保证。

  

我创建了一个ReadStream并以块的形式显示了文本文件的数据,但是有可能找到缓冲区可能有的数据量吗?

如果在创建流时设置highWaterMark,那么这将是您可以获得的最大大小块。如果要查看当前highWaterMark的设置,可以在以下位置查看流实例数据:

myReadStream._readableState.highWaterMark

这不是文档化的API,因此可能会发生变化。如果您需要知道,您可能只需在创建流时将其设置为所需的值。