You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Node.js读取文本文件ReadStream中Chunk(Buffer)的数据量能否获取?

获取ReadStream每个Chunk的数据量

当然可以获取每个chunk承载的数据量啦!其实方法很简单,根据你创建流时指定的编码不同,获取方式略有区别:

情况1:指定了编码(比如你代码里的utf8

当你在createReadStream里指定了编码('utf8'),data事件回调里的chunk会是字符串类型。这时候:

  • chunk.length 会返回这个字符串的字符数量
  • 如果想获取这个chunk对应的字节数,可以把字符串转成Buffer再取长度:Buffer.from(chunk).length

情况2:未指定编码(默认)

如果没指定编码,chunk会是Buffer类型,直接用chunk.length就能拿到这个chunk的字节数,这也是最直接的方式。

修改你的代码示例

给你调整一下代码,加上获取数据量的逻辑(记得先引入fs模块哦):

const fs = require('fs');
var myReadStream = fs.createReadStream( __dirname + '/readme.txt', 'utf8'); 
myReadStream.on('data', function(chunk){ 
    console.log('new chunk received'); 
    console.log('当前chunk的字符数:', chunk.length);
    console.log('当前chunk的字节数:', Buffer.from(chunk).length);
    console.log(chunk);
});

补充说明

  • Node.js的ReadStream默认的highWaterMark(每次读取的最大字节数)是64KB(65536字节),所以大部分情况下chunk的字节数会接近这个值,但文件最后一个chunk可能会更小。
  • 如果你想自定义每次读取的最大字节数,可以在创建流的时候配置:
var myReadStream = fs.createReadStream( __dirname + '/readme.txt', {
    encoding: 'utf8',
    highWaterMark: 1024 // 自定义为1KB
});

内容的提问来源于stack exchange,提问作者Nihara Nelligahawatta

火山引擎 最新活动