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

hur*_*lad 4 testing stream node.js

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

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

s.push(x);  // <==== Are these identical?
s.write(x);
Run Code Online (Sandbox Code Playgroud)

有理由偏爱一个吗?

use*_*109 13

,他们并不完全相同.

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

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

要实现流,开发人员必须编写某些方法,此处给出.

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
Run Code Online (Sandbox Code Playgroud)

推必须只能用于能够读取的数据流(),即,双工变换流.它只能在这些函数_read,_transform或_flush中使用.PassThrough是Transform的一个实现.


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

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

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