Stream 文档指出,双工流“是实现可读和可写接口的流”,而转换流“是双工流,其中输出以某种方式从输入计算而来”。不幸的是,文档没有描述 Transform 流在 Duplex 流之外提供什么。
两者之间有什么区别吗?您什么时候会使用其中一种?
双工流可以被认为是一个可读流和一个可写流。两者都是独立的,并且每个都有单独的内部缓冲区。读取和写入事件独立发生。
Duplex Stream ------------------| Read <----- External Source You ------------------| Write -----> External Sink ------------------| You don't get what you write. It is sent to another source.
Transform 流是一个双工,其中读取和写入以因果方式发生。双工流的端点通过某种变换链接。读需要写已经发生。
Transform Stream --------------|-------------- You Write ----> ----> Read You --------------|-------------- You write something, it is transformed, then you read something.
区别只是语法糖。转换流是全双工流,但不是实现_write
和_read
方法,而是要求您仅实现_transform
方法。您可以在优秀的 substack 的流指南或Isaacs 的 readable-stream repo中阅读有关流的更多信息。
如果您阅读文档的API for stream implementationors部分,他们会指出 Duplex 和 Transform 流的一些可能用例分别是“读取和写入”和“对写入的数据进行操作,然后读取结果”。
简单地说,Transform 流允许您实现_transform
获取一些输入并在对数据进行一些操作后返回输出的方法,并且可以用于压缩或散列等事情,而 Duplex 流可以用于类似的事情TCP 套接字连接,您只需在其中发送和接收数据。
根据文档:
双工 - 可读和可写的流(例如,net.Socket)。
Transform - 可以在写入和读取数据时修改或转换数据的双工流(例如,zlib.createDeflate())。
所以简单地说: