ノードのPassThrough ストリームを使用してストリーム ユーティリティをテストしていて、ストリームからデータを取得したいとします。
var s = new require('stream').PassThrough();
s.push(x); // <==== Are these identical?
s.write(x);
どちらかを優先する理由はありますか?
ノードのPassThrough ストリームを使用してストリーム ユーティリティをテストしていて、ストリームからデータを取得したいとします。
var s = new require('stream').PassThrough();
s.push(x); // <==== Are these identical?
s.write(x);
どちらかを優先する理由はありますか?
いいえ、同一ではありません。
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() が可能なストリーム、つまりReadable、Duplex、およびTransformストリームにのみ使用する必要があります。これらの関数 _read、_transform、または _flush 内でのみ使用する必要があります。PassThrough は Transform の実装です。
writeは、書き込み可能なストリームのユーザーが使用することになっています。
このメソッドは、基礎となるシステムにいくつかのデータを書き込み、データが完全に処理されると、提供されたコールバックを呼び出します。
書き込み可能なストリームを使用する (それに書き込む) 場合は、write を使用します。プッシュは書き込みの代わりにはなりません。パススルーには write を使用します。