2013-04-16 20 views

答えて

12

streamifierを使用すると、文字列とバッファを新しいストリームAPIを使用して読み取り可能なストリームに変換できます。

+0

これは、ストリームバッファーのようなオプションやWindows Azureブログの1つのソリューションの中で最高の機能を発揮します。間違いなく最も速いです。 – Abadaba

+8

このライブラリはうまく見えますが、@ zjonssonの答えは、npmjsが再びダウンしていない限り、非常に使いやすいです。 – natevw

108

最も簡単な方法は、新しい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) 
+7

node.jsが内部的にそうしない限り、このソリューションはバッファをより小さなチャンクにスライスしないので、一部のパイプ送り先にとって理想的ではないかもしれません。 *しかし、もしあなたが見ても、受け入れられた答えからストリーミファイアライブラリはありません。だからシンプルに保つために+1。 – natevw

+2

'var bufferStream = stream.PassThrough();'を使うと、後でコードの読者に意図が明確になるのではないかと思いますが? – natevw

+0

また、ストリームがある時点でストリームが終了することを期待している場合は、おそらく 'bufferStream.end()'を呼び出す必要があることに注意してください。 – natevw

24

natevwが示唆したように、それはstream.PassThroughを使用するためにさらに多くの慣用的だし、endそれは:

var buffer = new Buffer('foo'); 
var bufferStream = new stream.PassThrough(); 
bufferStream.end(buffer); 
bufferStream.pipe(process.stdout); 

これは、バッファがvinyl-fsに/パイプで連結された変換方法もあります。

+1

バッファ全体でなぜ「終了」しますか?そしてなぜ 'end'がここで' pipe'の後に来るのですか – Startec

+3

'end(buffer)'は 'write(buffer)'と 'end()'です。もうストリームが必要ないのでストリームを終了します。パイプのようなデータイベント用のハンドラがある場合、PassThroughはデータの発信を開始するだけなので、ここではend/pipeの順序は関係ありません。 – morris4

+1

@Startecバッファを分割しないことはオーバーヘッドが少ないことを意味します。消費者が大きなチャンクを処理できない場合は、チャンクを分割するものでガードします。 – binki

関連する問題