• 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的可读流和可写流。