我该怎么做随机存取使用Node.js的(大)文件中读取?(How do I do random ac

2019-08-04 06:42发布

我缺少的东西或做通常的文件随机访问方法的node.js的标准文件I / O模块缺乏类似物?

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

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

Answer 1:

tell不大,但它是相当罕见的还不知道在一个文件中,你所在的位置,或者没有办法来跟踪自己。

seek经由间接暴露position的参数fs.readfs.write 。 当给出的说法将寻求到该位置执行其操作之前,如果null ,它将使用它有任何以前的位置。



Answer 2:

节点没有这些内置的,你可以得到最接近的是使用fs.createReadStreamstart参数来启动从偏移读取,(通过在现有的fd ,以避免重新打开文件)。

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



Answer 3:

我想这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
}

}



Answer 4:

用这个:

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



文章来源: How do I do random access reads from (large) files using node.js?