5

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

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

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

4

4 回答 4

9

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

seek通过and的position论点间接暴露。给出时,参数将在执行其操作之前寻找该位置,如果,它将使用它之前的任何位置。fs.readfs.writenull

于 2012-12-24T04:54:33.327 回答
2

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

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

于 2012-12-18T12:35:22.637 回答
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
}

}

于 2016-10-18T12:41:29.270 回答
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

于 2017-08-24T08:22:45.747 回答