Readable stream 和 Writable stream 的最佳实践
pipe()
尽管可以单独使用 Writable stream 和 Readable stream,但是最有效的方法是将两者结合使用。
通过 pipe() 方法可以将 Writable stream 和 Readable stream 优雅的结合起来:
| 1 | const readable = fs.createReadStream('main.txt') | 
pipe() 方法会将 Readable stream 切换到 flowing 模式,并将 Readable stream 的所有数据推送到绑定的 Writable stream。
不仅如此,pipe() 内置了很多细节:
- Writable stream 生产数据给 Readable stream, Readable stream 触发 data事件
- 当 Writable stream 触发 drain事件时,Readable stream 调用resume()方法
- 当 Readable stream 监听的 data事件中,write()方法返回了false, 就会停止调用该方法
- 直到缓冲区中有可用空间,Writable stream 就会触发 drain事件从而恢复读取数据
数据流会以上述方式自动管理,所以即使 Readable stream 更快,目标 Writable stream 也不会超负荷。
pipeline()
stream 模块提供了 pipeline() 方法,相当于 Readable stream 的 readable.pipe() 方法:
| 1 | require('stream').pipeline( |