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