如何使用node.js从(大)文件中进行随机访问读取?

我错过了什么或者是否node.js的标准文件I / O模块缺乏通常的文件随机访问方法的模拟?

  • seek() / fseek()
  • tell() / ftell()

如果没有这些,那么如何从节点中的大文件读取随机固定大小的logging?

tell不是,但是很less有人不知道自己在文件中的位置,或者没有办法跟踪自己。

seek通过fs.readfs.writeposition参数间接暴露。 在给定的时候,论证会在执行操作之前寻求到那个位置,如果是null ,它将使用它以前的任何位置。

节点没有这些内置的,最接近你可以得到的是使用fs.createReadStream与一个start参数开始读取一个偏移量,(传入一个现有的fd以避免重新打开文件)。

http://nodejs.org/api/fs.html#fs_fs_createreadstream_path_options

我想,createReadStream反复创build新的文件描述符。 我更喜欢同步版本:

 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 } 

}

用这个:

 fs.open(path, flags[, mode], callback) 

那么这个:

 fs.read(fd, buffer, offset, length, position, callback) 

阅读这个细节:

https://nodejs.org/api/fs.html#fs_fs_read_fd_buffer_offset_length_position_callback

Interesting Posts