PassThrough流的write()和push()有什么区别?

时间:2013-08-07 06:35:27

标签: node.js testing stream

假设我正在使用节点PassThrough stream来测试我的流实用程序,并且我想要一些数据来自我的流。

var s = new require('stream').PassThrough();

s.push(x);  // <==== Are these identical?
s.write(x);

任何理由更喜欢一个而不是另一个?

1 个答案:

答案 0 :(得分:13)

,它们不完全相同。

push用于实现可读流。它将数据推入读取队列,然后可以通过调用read()来读取。如果使用null调用它,则它将发出数据结束信号(EOF)。参见给出的注释:

  

注意:此函数应由可读实现者调用,而不是由可读流的使用者调用。

要实现流,开发人员必须使用here编写某些方法。

Use-case                                       Class       Method(s) to implement
Reading only                                   Readable    _read
Writing only                                   Writable    _write
Reading and writing                            Duplex      _read, _write
Operate on written data, then read the result  Transform   _transform, _flush

push必须仅用于能够读取()的流,即可读双工转换流。它只能在这些函数_read,_transform或_flush中使用。 PassThrough是Transform的实现。


write应该由可写流的用户使用。

  

此方法将一些数据写入底层系统,并调用   数据完全处理完毕后提供回调。

如果您打算使用Writable流(写入),请使用write。 push不是写的替代品。使用write for PassThrough。