任意流的通用方法:

1. 关闭流:

流对象.destroy([Error对象])

  1. js原生的Error对象

2. 捕捉错误:

流对象.on('error',function(Error对象){})

  1. js原生的Error对象

读取流:

1. 创建流:

child::^08aebc

2. 设置数据单元:

^1f6949 数据单元默认为二进制的一个字节, 可以通过流对象.setEncoding('编码格式')来决定数据单元为一个字符

3. 截取流中数据单元:

3.1. 采用自动流动的方式:

readerStream.on('data', function(数据单元){})

4. 等待接受完毕:

readerStream.on('end',function(){})

  1. 当源中没有新的数据时, 将会触发end事件

5. 导向其他流:

readable.pipe(目标流[, 参数对象])

  1. 目标流必须具有写入流
  2. 参数对象只有一个属性: end ,默认为true
    1. 是否在读取流触发end事件时自动触发目标流的end事件
  3. 返回目标流

6. 断开与其他流的连接:

流对象.unpipe([目标流])

  1. 默认断开所有的连接

写入流:

1. 创建写入流:

child::^a966a6

2. 设置默认的编码格式:

writable.setDefaultEncoding(encoding)

  1. 当写入字符串, 且没有提供字符编码时, 将采用这个方法所设置的默认编码格式

3. 写入数据:

writable.write(数据[, 编码格式][,回调函数])

  1. 数据可以是:
    1. 字符串
    2. child::Buffer
    3. Uint8Array
  2. 编码格式 只有数据是字符串时才需要, 默认为^666631
  3. 回调函数将会在数据完全写入后调用

3.1. 返回值:

  1. 如果写入的数据内存体积大于highWaterMark, 则返回false, 否则返回true

3.2. 机制:

  1. 如果写入的数据内存体积大于highWaterMark, 则会把多余的数据保存在内存中, 然后逐渐写入到流中
  2. 当内存中的数据都写入到流中时, 触发'drain'事件

3.3. 注意:

  1. 因为多余的数据将会被保存在内存中, 所以对于大容量的数据, 推荐使用pipe()

4. 处理写入完成:

4.1. 等待写入完成:

writerStream.on('finish', function() {})

4.2. 确认写入完成:

writable.end([最后的数据[, 编码格式]][, 回调函数])

  1. 最后的数据 可以是buffer, 字符串
  2. 编码格式 只有数据是字符串时才需要, 默认为^666631
  3. 将会触发'finish'事件