首页 > 解决方案 > 获取流发出的字节数

问题描述

我可以使用以下方法找出发送到数据处理程序的字节数:

let bytesEmitted = 0;

strm.setEncoding('utf8');

strm.on('data', d => {
  bytesEmitted += Buffer.byteLength(d);
});

但我正在寻找无需附加我自己的处理程序即可访问发出的字节数的方法。

有一个属性 - strm.bytesRead - 但我担心这并不代表“发出的字节数” - 它必须是准确的。

标签: node.jsstreamnodejs-stream

解决方案


这是将bytesRead属性引入Readable流的提交。

我们可以在第 140 行看到,当有新的数据块可用时属性会更新,并且在第 148 行data,只要流保持流动,事件就会立即发出。对于在不离开流动状态的情况下完成的流,您可以随时轮询或以其他方式访问该bytesRead属性,并认为它等于发出的实际字节数。但是,如果您暂停流,则缓冲的流bytesRead可能会落后于发出的实际字节,直到所有可用的块都被消耗完。

请注意,此行为未记录在案,并且可能随时更改。


推荐阅读