38

Stream 文档指出,双工流“是实现可读和可写接口的流”,而转换“是双工流,其中输出以某种方式从输入计算而来”。不幸的是,文档没有描述 Transform 流在 Duplex 流之外提供什么。

两者之间有什么区别吗?您什么时候会使用其中一种?

4

4 回答 4

93

双工流可以被认为是一个可读流和一个可写流。两者都是独立的,并且每个都有单独的内部缓冲区。读取和写入事件独立发生。

                             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.
于 2013-08-20T15:33:55.430 回答
10

区别只是语法糖。转换流是全双工流,但不是实现_write_read方法,而是要求您仅实现_transform方法。您可以在优秀的 substack 的流指南Isaacs 的 readable-stream repo中阅读有关流的更多信息。

于 2013-08-20T12:56:53.457 回答
2

如果您阅读文档的API for stream implementationors部分,他们会指出 Duplex 和 Transform 流的一些可能用例分别是“读取和写入”和“对写入的数据进行操作,然后读取结果”。

简单地说,Transform 流允许您实现_transform获取一些输入并在对数据进行一些操作后返回输出的方法,并且可以用于压缩或散列等事情,而 Duplex 流可以用于类似的事情TCP 套接字连接,您只需在其中发送和接收数据。

于 2013-08-20T13:17:38.303 回答
2

根据文档

双工 - 可读和可写的流(例如,net.Socket)。

Transform - 可以在写入和读取数据时修改或转换数据的双工流(例如,zlib.createDeflate())。

所以简单地说:

于 2019-06-28T17:14:31.167 回答