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

时间:2012-12-18 12:25:35

标签: node.js seek random-access

我是否遗漏了某些东西或者node.js的标准文件I / O模块是否缺乏通常的文件随机访问方法的类似物?

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

如何从没有这些文件的节点中的大文件中读取随机固定大小的记录?

4 个答案:

答案 0 :(得分:7)

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

seek通过positionfs.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