梗概:
Stream 是一个抽象接口,实现了[base::流]的数据类型 ,Node 中有很多对象实现了这个接口。 例如,对http 服务器发起请求的request 对象就是一个 Stream,还有stdout(标准输出)。
1. Stream的四种类型:
Node.js,Stream 有四种流类型:
- Readable - 可读操作。
- Writable - 可写操作。
- Duplex - 可读可写操作.
- Transform - 操作被写入数据,然后读出结果。
Stream的数据单元:
1. 数据单元的容量:
^3e6bbd 2. 表示流的最大体积,单位为KB, 默认为64* 1024
- 流在被创建的时候, 可以设置
highWaterMark属性
相关概念:
所有的 Stream 对象都是 EventEmitter 的实例。常用的事件有:
- data - 当有数据可读时触发。
- end - 没有更多的数据可读时触发。
- error - 在接收和写入过程中发生错误时触发。
- finish - 所有数据已被写入到底层系统时触发。
- close - 某个流被关闭
机制:
1. 读取流:
- 有多种方法可以使用读取流中的数据, 但只能同时使用一种, 否则可能产生错误
- 添加
'data'事件监听器, 自动流动数据 - 通过
pipe()自动流入到其他流中 - 监听
readable事件, 手动控制流动
- 添加
2. 自动读取流:
2.1. 以下操作会开启读取流自动流动:
手动切换:
readable.resume()切换为自动流动
自动切换:
- 添加了
'data'事件监听器- 注意移除了
'data'监听器之后, 自动流并不会自动关闭, 这时就会丢失数据
- 注意移除了
- 使用
stream.pipe()把读取流输入进其他流 - 移除了
readable事件监听器
3. 关闭自动读取流:
3.1. 以下操作会关闭自动流动:
手动切换:
stream.pause()- 当然如果已经连接有其他流, 当其他流重新索求数据流时, 又会重新开启自动流
自动切换:
- 当管道连接断开时
- 添加
readable事件监听器
3.2. 手动流动读取流:
- 监听
readable事件, 通过事件方法readable.read(), 手动流动
语法:
1. 梗概:
1.1. 读取流:
var readerStream = fs.createReadStream('文件路径')创建实例对象, 确定源readerStream.on('data', function(数据单位){})为流中数据更新注册事件, 以截取数据readerStream.on('end',function(){})监听数据读取完毕的事件, 处理收集到的数据
1.2. 写入流:
var writerStream = fs.createWriteStream('文件路径')创建实例对象, 确定目标writerStream.write(data,'编码格式')将数据写入流中writerStream.on('finish', function(){}监听数据写入完毕的事件
2. 详细语法:
- child::Stream数据类型 语法
- [ 菜鸟教程](https://www.runoob.com/nodejs/nodejs-stream.html|Node.js Stream(流) | 菜鸟教程](流)%20)