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