2017-02-26 9 views
1

file.write(fd,...)file.createWriteStream(...)の違いは何ですか?file.createWriteStream(...)ではなくfile.write(...)を使用する必要がありますか?

例:次のコードでは、両方のスニペットが同じことをしています。

var http = require('http'); 
var fs = require('fs'); 
http.createServer(function(request, response) { 
    var newFile = fs.createWriteStream('newFile.txt'); 
    request.pipe(newFile); 
});, 

var http = require('http'); 
var fs = require('fs'); 
http.createServer(function(request, response) { 
    var data = ""; 
    request.on('data', function(chunk) { 
     data += chunk.toString(); 
    }); 
    reuqest.on('end', function() { 
     fs.write('newFile.txt', chunk); 
    }); 
}); 

私はどちらが良いか混乱していますか?ありがとう。

答えて

1

バイナリデータを扱うときは、前者の方が良いでしょう。要求ストリームを指定されたファイルに直接パイプします。また、このアプローチを使用すると、受信データサイズが大きい場合に発生する可能性のあるメモリの問題に対処する必要はありません。

第2のアプローチは、テキストストリームのみを処理するシナリオで動作し、文字エンコーディングは既知です。受信データが一部の画像、pdfなどの一部である場合は、バッファデータを受信し、2番目の方法は正しく動作しません。また、Node docsによれば、コールバックを待たずにfs.writeを同じファイルに複数回使用することは安全でなく、fs.createWriteStreamが推奨されます。

関連する問題