9

これら2つの操作の基本的な違いは何ですか?

someReadStream.pipe(fs.createWriteStream('foo.png'));

vs

someReadStream.on('data', function(chunk) { blob += chunk } );
someReadStream.on('end', function() { fs.writeFile('foo.png', blob) });

スクレイピングにリクエストライブラリを使用する場合、前者の方法でのみ写真(png、bmp)などを保存できます。後者の方法では、同じギバーシュ(バイナリ)データがありますが、画像はレンダリングされません。

それらはどう違いますか ?

4

1 に答える 1

9

node.js でストリームを操作している場合は、それらをパイプすることをお勧めします。

Node.js の stream-event docsによると、dataイベントはバッファー (デフォルト) または文字列 (encoding設定されている場合) のいずれかを発行します。

テキスト ストリームを操作している場合、dataイベントを使用して文字列データのチャンクを連結できます。その後、データを 1 つの文字列として操作できるようになります。

しかし、バイナリ データを扱う場合は、バッファを受け取るため、それほど単純ではありません。バッファを連結するには、 のような特別なメソッドを使用しますBuffer.concat。バイナリ ストリームにも同様のアプローチを使用できます。

var buffers = [];
readstrm.on('data', function(chunk) {
    buffers.push(chunk);
});
readstrm.on('end', function() {
    fs.writeFile('foo.png', Buffer.concat(buffers));
});

出力ファイルのサイズを確認することで、問題が発生したときに気付くことができます。

于 2013-01-05T10:35:50.533 に答える