nodejs - 浅析 stream(流)

允我心安 提交于 2020-02-09 03:32:37

  • nodejs中有许多的对象或者方法都用到了流。
    比如说 HTTP 请求 和 process.stdout 就都是流的实例。

  • nodejs中的流可以是可读的,可写的或者是可读写的。
    而且另外一点,所有的流都是事件中 EventEmitter (emitter /ɪ’mɪtə/ n. 发射器 ) 的实例。


## Node.js 中有四种基本的流类型:

Readable - 可读的流 (例如 fs.createReadStream()).

Writable - 可写的流 (例如 fs.createWriteStream()).

Duplex - 可读写的流 (例如 net.Socket).

Transform - 在读写过程中可以修改和变换数据的 Duplex 流 (例如 zlib.createDeflate()).

## 流的 事件 and 模式 (Readable 為例)

事件

fs.createReadStream有以下监听事件:
在这里插入图片描述
然后ReadStream类又继承了Readble。
在这里插入图片描述
所以它又拥有下面这些事件:
在这里插入图片描述

模式

有兩種模式

  • flowing(流动模式)

  • paused(暂停模式)

官方文档中介绍了,可读流默认的模式是paused。
切换的方法有三种,我们已经监听data事件,这时可读流的模式已经变成了flowing

在这里插入图片描述

其他流

Writable (可写流)

  • drain事件
    drain事件的触发条件是,当缓存区有需要写入的数据并且当缓存区被清空时会触发drain事件

Pipe(管道)

用於:可读流读出的数据需要放到可写流中去写入到文件里面

自定义流

自定义可读流

可读写流(双工流)

也就是一个流中会同时有可读流和可写流存在并且互相不干扰;

转换流(Transform)


才疏学浅。也是懵懵懂懂的。有些地方也没有讲的很明白,大家多多包涵,如果有时间的话我们会在另一篇文章中来实现一下基于事件EventEmittenr的可读流和可写流。

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!