How to move a FileHandle#39;s internal position without actually reading data?(如何在不实际读取数据的情况下移动文件句柄的内部位置?)
问题描述
我正在尝试使用fs.open和FileHandle在Node中逐字节读取二进制文件。使用FileHandle.read(buffer, offset, length, position),我可以:
- 将
position参数留空,在这种情况下,读取的每个数据块都会移动FileHandle的内部位置 - 提供
position参数,在这种情况下,内部位置将保持不变
我希望从文件中间的特定位置读取一个值(使用FileHandle.read和一个位置),并根据该值从文件中的另一个点顺序读取其他一些数据(使用FileHandle.read而不使用位置)。
第一部分很简单。对于第二部分,我知道我可以:
- 维护一个自定义位置变量并将其提供给每个
read调用 - 从文件中读取一定数量的数据只是为了更改内部位置
我还可以在FileHandle上构建我自己的抽象,它将保持自己的内部位置并允许我更改它,但如果可以的话,我宁愿避免这样做。
是否有方法允许我跳过FileHandle中的任意字节数,或手动设置其内部位置?
libuv
fs库对文件位置采取了不干预的策略,将其完全留给推荐答案和操作系统来处理。因此,FileHandle对象中没有保存的位置。
您可以看到相关代码here,其中它只是执行以下操作:
position = bufferOrOptions.position || null;
并将position变量直接传递给本机代码绑定:const bytesRead = (await binding.read(handle.fd, buffer, offset, length,
position, kUsePromises)) || 0;
因此,fs模块本身并不跟踪文件位置,因此您无法在fs模块中设置它。除了对NodeJS内部进行黑客攻击之外,我不知道还有什么其他方法可以设置文件位置,除了您自己建议的覆盖各种方法以跟踪当前文件位置,然后能够在没有显式传递到文件位置的任何API调用进行之前将该文件位置设置为";当前&q;值。
来自C++,在C++中,这是STD文件库的一个内置部分,对于我来说,在NodeJS中似乎总是很奇怪,因为没有提供它。如果您查看libuv中可用的文件操作here,它似乎甚至不知道文件位置here,这可能就是NodeJS效仿的原因。
无论如何,很抱歉我无法提供任何神奇、简单的答案,但希望这能解释这方面的情况,您可以决定如何最好地继续进行。
这篇关于如何在不实际读取数据的情况下移动文件句柄的内部位置?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:如何在不实际读取数据的情况下移动文件句柄的内部位置?
- 失败的 Canvas 360 jquery 插件 2022-01-01
- Css:将嵌套元素定位在父元素边界之外一点 2022-09-07
- 如何使用 JSON 格式的 jQuery AJAX 从 .cfm 页面输出查 2022-01-01
- 使用RSelum从网站(报纸档案)中抓取多个网页 2022-09-06
- addEventListener 在 IE 11 中不起作用 2022-01-01
- Quasar 2+Apollo:错误:找不到ID为默认的Apollo客户端。如果您在组件设置之外,请使用ProvideApolloClient() 2022-01-01
- CSS媒体查询(最大高度)不起作用,但为什么? 2022-01-01
- 400或500级别的HTTP响应 2022-01-01
- Fetch API 如何获取响应体? 2022-01-01
- Flexslider 箭头未正确显示 2022-01-01
