是否可以从节点js中的文件(文本文件)中知道块(缓冲区)在ReadStreaming中携带的数据量?
我创建了一个ReadStream并以块的形式显示了文本文件的数据,但是有可能找到缓冲区可能有的数据量吗?
var myReadStream = fs.createReadStream( __dirname + '/readme.txt', 'utf8');
myReadStream.on('data', function(chunk){
console.log('new chunk received');
console.log(chunk);
答案 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,因此可能会发生变化。如果您需要知道,您可能只需在创建流时将其设置为所需的值。