6

ノードのPassThrough ストリームを使用してストリーム ユーティリティをテストしていて、ストリームからデータを取得したいとします。

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

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

どちらかを優先する理由はありますか?

4

1 に答える 1

16

いいえ、同一ではありません。

pushは、読み取り可能なストリームを実装するためのものです。データは読み取りキューにプッシュされ、read() を呼び出すことで読み取ることができます。null で呼び出された場合、データの終わり (EOF) を通知します。与えられた注を参照してください:

注: この関数は、Readable ストリームのコンシューマではなく、Readable 実装者によって呼び出されるべきです。

ストリームを実装するには、開発者が特定のメソッドを作成する必要があります

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() が可能なストリーム、つまりReadableDuplex、およびTransformストリームにのみ使用する必要があります。これらの関数 _read、_transform、または _flush 内でのみ使用する必要があります。PassThrough は Transform の実装です。


writeは、書き込み可能なストリームのユーザーが使用することになっています。

このメソッドは、基礎となるシステムにいくつかのデータを書き込み、データが完全に処理されると、提供されたコールバックを呼び出します。

書き込み可能なストリームを使用する (それに書き込む) 場合は、write を使用します。プッシュは書き込みの代わりにはなりません。パススルーには write を使用します。

于 2013-08-07T07:29:54.257 に答える