如何理解stream读取数据
发布于 12 小时前 作者 warmhole 64 次浏览 来自 问答

大家好,有个stream的问题请教下: stream.on(‘data’,function(data){ res.write(data); }); 事件是在什么时候回调的呢?在执行var stream = require(‘fs’).createReadStream(‘pic.png’);的时候这个stream里面存放的是什么呢?假如一个没有注册data回调会怎么样呢?谢谢! stream.png

2 回复

虽然我理解的是在可以提供数据的时候触发

没有应该就在暂停模式,一旦添加data listener就转换为flowing mode,文档应该都写了。

顺便,node的Stream有好多历史包袱,各种状态管理再加上历史兼容,我是看源码看跪了。能写出Stream2的人真是佩服他们。

node Changelog有个关于Stream3的图,感受下,反正对我还是抽象一点好。

stream3

’data‘事件,最开始应该只是设计来让流尽可能快把可以给出的数据给出,是没有流量控制的。监听data事件时,就相当于告诉流我准备好了,尽快把数据给我。(push stream)。这是stream1

但有时需要控制流量。所以后来搞了个readable事件,Consumer可以根据自身能力read数据(pull stream).这是熟称的stream2

最后,大概人们想在支持pull 数据的时候也能够监听data事件,于是read的时候也会触发data事件了。大概,这就是人们所称的stream3。

这样发展下来,估计大家都会迷惑,反正我这种渣渣迷惑了,大神们估计很清晰

正好之前对这个感兴趣研究了下历史,但水平有限,只是一些浅见。希望有帮助

关于Stream的历史与设计可以看看我的笔记,安利哈哈哈

回到顶部