何か足りないのでしょうか、それとも node.js の標準ファイル I/O モジュールには、通常のファイル ランダム アクセス方法に類似したものが欠けていますか?
seek()/fseek()tell()/ftell()
これらなしでノード内の大きなファイルからランダムな固定サイズのレコードを読み取るにはどうすればよいですか?
何か足りないのでしょうか、それとも node.js の標準ファイル I/O モジュールには、通常のファイル ランダム アクセス方法に類似したものが欠けていますか?
seek()/fseek()tell()/ftell()これらなしでノード内の大きなファイルからランダムな固定サイズのレコードを読み取るにはどうすればよいですか?
tellそうではありませんが、ファイル内の現在の位置がわからないことや、自分自身を追跡する方法がないことはほとんどありません。
seekとのposition引数を介して間接的に公開されます。引数を指定すると、操作を実行する前にその場所をシークします。fs.readfs.writenull
ノードにはこれらが組み込まれていません。取得できる最も近い方法は、パラメーターを使用fs.createReadStreamしてオフセットから読み取りを開始することです (ファイルを再度開かないように既存のものを渡します)。startfd
http://nodejs.org/api/fs.html#fs_fs_createreadstream_path_options
createReadStream は新しいファイル記述子を何度も作成すると思います。私は同期バージョンを好みます:
function FileBuffer(path) {
const fd = fs.openSync(path, 'r');
function slice(start, end) {
const chunkSize = end - start;
const buffer = new Buffer(chunkSize);
fs.readSync(fd, buffer, 0, chunkSize, start);
return buffer;
}
function close() {
fs.close(fd);
}
return {
slice,
close
}
}