标准答案
- Readable 适合文件、网络和请求体的分段读取,避免一次性将大对象放入内存。
- Writable 通过 write 和 drain 反馈接收能力,Transform 可以边读边转换。
- 流的错误、结束、关闭和背压事件都要处理,不能只监听 data。
- 使用 pipe 或 pipeline 连接流时要确认错误会传播并在失败后销毁相关资源。
题目解析
Readable、Writable、Duplex 和 Transform 分别描述数据产生、接收、双向处理和转换。Stream 适合大文件、网络和持续数据的增量处理,但每一段都要有错误、结束、关闭和取消语义。
Writable 的 write 返回 false 时说明缓冲达到水位,生产者应等待 drain;Transform 还要确保输入结束后正确 flush 输出。只监听 data 而忽略背压,会把内存压力推迟到运行时。
pipe 适合简单连接,复杂链路应使用 pipeline 统一传播错误和销毁。已写入文件、对象存储和数据库记录的部分副作用仍需业务清理或状态补偿。
常见误区
- 误区:读取 data 时不限制内存。改正:使用流式处理和大小上限,不把所有 chunk 无界保存在数组中。
- 误区:忽略 drain 导致写入缓冲增长。改正:根据 write 返回值暂停生产,等待 drain 后继续。
- 误区:只关闭一端。改正:使用 pipeline 或统一的 destroy/abort 路径,确保链路和关联文件句柄都释放。