流文档中指出,Duplex 流是"实现可读和可写接口的流",Transform 流是"输出从输入中计算得到的 Duplex 流。"不幸的是,文档没有描述 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 Stream --------------|-------------- You Write ----> ----> Read You --------------|-------------- You write something, it is transformed, then you read something.
_write
和_read
方法那样,您只需实现_transform
方法即可。您可以在优秀的substack流指南或Isaacs的可读流库中了解更多有关流的信息。Duplex - 可读写的流(例如,net.Socket)。
Transform - Duplex 流可以在写入和读取数据时修改或转换数据(例如,zlib.createDeflate())。
简单来说:
如果你阅读文档中的流实现者API部分,它们说明Duplex和Transform流的一些可能用例分别是“读取和写入”以及“对已写入数据进行操作,然后读取结果”。
简单来说,Transform流允许你实现_transform
方法,该方法接受一些输入并在数据上执行某些操作后返回输出,可用于诸如压缩或哈希等任务,而Duplex流可用于像TCP套接字连接这样的任务,其中你只需发送和接收数据。
_transform
方法,该方法与 Writeable Stream 的_write
方法具有相同的签名,因此这意味着所读取的内容取决于所写入的内容。其中一个影响是您无法像_read
一样指定要读取的字节数,它只是您写入的字节数。另一方面,对于 Duplex 流,理论上可以创建一个依赖于_write
的_read
,或者甚至让_write
依赖于_read
,但 Duplex Stream 类本身并不意味着读/写链接。 - brainkim