stream2インターフェイスを使用した後、node.jsバッファを読み取り可能なストリームに変換するにはどうすればよいですか?バッファをストリーム2でラップする方法読み込み可能なストリーム?
これはすでにanswerとストリームバッファモジュールが見つかりましたが、このモジュールはstream1インターフェイスに基づいています。
stream2インターフェイスを使用した後、node.jsバッファを読み取り可能なストリームに変換するにはどうすればよいですか?バッファをストリーム2でラップする方法読み込み可能なストリーム?
これはすでにanswerとストリームバッファモジュールが見つかりましたが、このモジュールはstream1インターフェイスに基づいています。
streamifierを使用すると、文字列とバッファを新しいストリームAPIを使用して読み取り可能なストリームに変換できます。
最も簡単な方法は、新しいPassThroughストリームインスタンスを作成して、単にその中にデータをプッシュすることです。それを他のストリームにパイプすると、データは最初のストリームから引き出されます。バッファ付き
var stream = require('stream');
// Initiate the source
var bufferStream = new stream.PassThrough();
// Write your buffer
bufferStream.end(new Buffer('Test data.'));
// Pipe it to something else (i.e. stdout)
bufferStream.pipe(process.stdout)
node.jsが内部的にそうしない限り、このソリューションはバッファをより小さなチャンクにスライスしないので、一部のパイプ送り先にとって理想的ではないかもしれません。 *しかし、もしあなたが見ても、受け入れられた答えからストリーミファイアライブラリはありません。だからシンプルに保つために+1。 – natevw
'var bufferStream = stream.PassThrough();'を使うと、後でコードの読者に意図が明確になるのではないかと思いますが? – natevw
また、ストリームがある時点でストリームが終了することを期待している場合は、おそらく 'bufferStream.end()'を呼び出す必要があることに注意してください。 – natevw
natevwが示唆したように、それはstream.PassThrough
を使用するためにさらに多くの慣用的だし、end
それは:
var buffer = new Buffer('foo');
var bufferStream = new stream.PassThrough();
bufferStream.end(buffer);
bufferStream.pipe(process.stdout);
これは、バッファがvinyl-fsに/パイプで連結された変換方法もあります。
バッファ全体でなぜ「終了」しますか?そしてなぜ 'end'がここで' pipe'の後に来るのですか – Startec
'end(buffer)'は 'write(buffer)'と 'end()'です。もうストリームが必要ないのでストリームを終了します。パイプのようなデータイベント用のハンドラがある場合、PassThroughはデータの発信を開始するだけなので、ここではend/pipeの順序は関係ありません。 – morris4
@Startecバッファを分割しないことはオーバーヘッドが少ないことを意味します。消費者が大きなチャンクを処理できない場合は、チャンクを分割するものでガードします。 – binki
これは、ストリームバッファーのようなオプションやWindows Azureブログの1つのソリューションの中で最高の機能を発揮します。間違いなく最も速いです。 – Abadaba
このライブラリはうまく見えますが、@ zjonssonの答えは、npmjsが再びダウンしていない限り、非常に使いやすいです。 – natevw