任意流的通用方法:
1. 关闭流:
流对象.destroy([Error对象])
- js原生的Error对象
2. 捕捉错误:
流对象.on('error',function(Error对象){})
- js原生的Error对象
读取流:
1. 创建流:
child::^08aebc
2. 设置数据单元:
^1f6949
数据单元默认为二进制的一个字节, 可以通过流对象.setEncoding('编码格式')来决定数据单元为一个字符
3. 截取流中数据单元:
3.1. 采用自动流动的方式:
readerStream.on('data', function(数据单元){})
4. 等待接受完毕:
readerStream.on('end',function(){})
- 当源中没有新的数据时, 将会触发
end事件
5. 导向其他流:
readable.pipe(目标流[, 参数对象])
- 目标流必须具有写入流
- 参数对象只有一个属性:
end,默认为true- 是否在读取流触发end事件时自动触发目标流的end事件
- 返回目标流
6. 断开与其他流的连接:
流对象.unpipe([目标流])
- 默认断开所有的连接
写入流:
1. 创建写入流:
child::^a966a6
2. 设置默认的编码格式:
writable.setDefaultEncoding(encoding)
- 当写入字符串, 且没有提供字符编码时, 将采用这个方法所设置的默认编码格式
3. 写入数据:
writable.write(数据[, 编码格式][,回调函数])
数据可以是:字符串- child::Buffer
- Uint8Array
编码格式只有数据是字符串时才需要, 默认为^666631回调函数将会在数据完全写入后调用
3.1. 返回值:
- 如果写入的数据内存体积大于highWaterMark, 则返回false, 否则返回true
3.2. 机制:
- 如果写入的数据内存体积大于highWaterMark, 则会把多余的数据保存在内存中, 然后逐渐写入到流中
- 当内存中的数据都写入到流中时, 触发
'drain'事件
3.3. 注意:
- 因为多余的数据将会被保存在内存中, 所以对于大容量的数据, 推荐使用pipe()
4. 处理写入完成:
4.1. 等待写入完成:
writerStream.on('finish', function() {})
4.2. 确认写入完成:
writable.end([最后的数据[, 编码格式]][, 回调函数])