如何使用node.js从(大)文件中进行随机访问读取?
我错过了什么或者是否node.js的标准文件I / O模块缺乏通常的文件随机访问方法的模拟?
-
seek()
/fseek()
-
tell()
/ftell()
如果没有这些,那么如何从节点中的大文件读取随机固定大小的logging?
tell
不是,但是很less有人不知道自己在文件中的位置,或者没有办法跟踪自己。
seek
通过fs.read
和fs.write
的position
参数间接暴露。 在给定的时候,论证会在执行操作之前寻求到那个位置,如果是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