Javascript 如何移动文件句柄';没有实际读取数据的内部位置?
我正在尝试使用Javascript 如何移动文件句柄';没有实际读取数据的内部位置?,javascript,node.js,fs,Javascript,Node.js,Fs,我正在尝试使用fs.open和FileHandle在节点中逐字节读取二进制文件。使用FileHandle.read(缓冲区、偏移量、长度、位置),我可以: 将位置参数留空,在这种情况下,读取的每个数据块都会移动文件句柄的内部位置 提供一个position参数,在这种情况下,内部位置将保持不变 我想从文件中间的一个特定位置读取一个值(使用文件句柄。读取/一个位置),并基于该值,从文件中的另一个点顺序读取一些其他数据(使用文件句柄。 第一部分很简单。对于第二部分,我知道我可以: 维护一个自定义位置变
fs.open
和FileHandle
在节点中逐字节读取二进制文件。使用FileHandle.read(缓冲区、偏移量、长度、位置)
,我可以:
位置
参数留空,在这种情况下,读取的每个数据块都会移动文件句柄
的内部位置position
参数,在这种情况下,内部位置将保持不变read
调用文件句柄
上构建自己的抽象,这样可以保持自己的内部位置并允许我修改它,但如果可以的话,我宁愿避免这样做
有没有一种方法可以让我跳过
文件句柄中任意数量的字节,或者手动设置其内部位置?库对文件位置采取不干涉策略,完全由libuv和操作系统来处理。因此,FileHandle对象中没有保存的位置
您可以看到相关的代码,它只是这样做的:
position = bufferOrOptions.position || null;
只需将该位置
变量直接传递给本机代码绑定:
const bytesRead = (await binding.read(handle.fd, buffer, offset, length,
position, kUsePromises)) || 0;
因此,fs
模块本身不跟踪文件位置,因此您无法在fs
模块中“设置”文件位置。除了对nodejs内部进行黑客攻击之外,我不知道还有什么其他方法可以“设置”文件位置,除了您自己的建议,即覆盖各种方法以跟踪“当前”文件位置,然后能够将该文件位置设置为“当前”文件位置在进行任何API调用之前,未显式传递到文件位置的值
来自C++,在这里它是STD文件库的一个内置部分,在NoDEJS中,对于它没有任何规定,这似乎总是很奇怪。如果查看其中可用的文件操作,可能libuv甚至没有文件位置感,因此这可能就是nodejs效仿的原因
无论如何,很抱歉,我不能提供任何神奇、简单的答案,但希望这能解释这方面的情况,您可以决定如何最好地继续进行。谢谢,我想我将构建一个小抽象。