我是否遗漏了某些东西或者node.js的标准文件I / O模块是否缺乏通常的文件随机访问方法的类似物?
seek()
/ fseek()
tell()
/ ftell()
如何从没有这些文件的节点中的大文件中读取随机固定大小的记录?
答案 0 :(得分:7)
tell
不是,但很少有人知道你在文件中的位置,或者没有办法自己跟踪。
seek
通过position
和fs.read
的{{1}}参数间接曝光。给定时,参数将在执行其操作之前寻找该位置,如果fs.write
,它将使用它以前的任何位置。
答案 1 :(得分:2)
节点没有内置这些内容,你可以得到的最接近的是使用带有fs.createReadStream
参数的start
来开始读取偏移量,(传入现有的fd
避免重新打开文件。)
http://nodejs.org/api/fs.html#fs_fs_createreadstream_path_options
答案 2 :(得分:1)
我想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
}
}
答案 3 :(得分:0)
使用此:
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