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




