假设我正在使用节点PassThrough stream来测试我的流实用程序,并且我想要一些数据来自我的流。
var s = new require('stream').PassThrough();
s.push(x); // <==== Are these identical?
s.write(x);
任何理由更喜欢一个而不是另一个?
答案 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。