私は、コードの実行全体に直接アクセスするためにメモリに入れたい比較的小さなファイル(数百キロバイト)を持っています。
NodeJの内部が正確にわからないので、fs open
で十分か、すべてのファイルを読み取ってBuffer
にコピーする必要がありますか?
基本的に、readFile
モジュールのreadFileSync
またはfs
関数を使用する必要があります。指定されたファイルの完全なコンテンツを返しますが、動作が異なります(非同期と同期)。
Node.jsのブロック(アプリケーションの起動時など)が問題にならない場合は、次のように簡単な同期バージョンを使用できます。
var fs = require('fs');
var data = fs.readFileSync('/etc/passwd');
非同期にする必要がある場合、コードは次のようになります。
var fs = require('fs');
fs.readFile('/etc/passwd', function (err, data ) {
// ...
});
いずれの場合でも、2番目のパラメーターとしてoptions
オブジェクトを指定できることに注意してください。使用するエンコードを指定します。エンコーディングを省略すると、生のバッファが返されます:
var fs = require('fs');
fs.readFile('/etc/passwd', { encoding: 'utf8' }, function (err, data ) {
// ...
});
有効なエンコードはutf8
、ascii
、utf16le
、ucs2
、base64
およびhex
。 binary
エンコーディングもありますが、これは非推奨であり、今後使用しないでください。適切な documentation でエンコーディングとバッファの処理方法の詳細を見つけることができます。
簡単
var buffer = fs.readFileSync(filename);
Node 0.12を使用すると、これを同期的に実行できるようになりました。
var fs = require('fs');
var path = require('path');
// Buffer mydata
var BUFFER = bufferFile('../public/mydata');
function bufferFile(relPath) {
return fs.readFileSync(path.join(__dirname, relPath)); // zzzz....
}
fs
はファイルシステムです。 readFileSync() は、バッファ、または要求した場合は文字列を返します。
fs
は、相対パスがセキュリティ上の問題であると正しく想定しています。 path
は回避策です。
文字列としてロードするには、エンコードを指定します。
return readFileSync(path,{ encoding: 'utf8' });