随机访问node.js中的大文件(需要支持64位文件偏移量)?

随机访问node.js中的大文件(需要支持64位文件偏移量)?,node.js,64-bit,large-files,random-access,large-file-support,Node.js,64 Bit,Large Files,Random Access,Large File Support,我正在考虑将一些跨平台脚本移植到node.js,一部分是为了学习node.js,一部分是因为我现在更熟悉JavaScript,另一部分是因为其他脚本语言中的大文件支持问题 一些脚本语言似乎对大文件偏移量有不完整的支持,这取决于它们是在32-/64位操作系统或处理器上运行,还是需要使用某些标志进行专门编译 所以我还是想尝试一下node.js,但谷歌搜索发现它对64位偏移量的大文件的支持(或者它的库/框架支持等)都不多 我意识到,在某种程度上,这至少取决于JavaScript的底层整数支持。如果我读

我正在考虑将一些跨平台脚本移植到node.js,一部分是为了学习node.js,一部分是因为我现在更熟悉JavaScript,另一部分是因为其他脚本语言中的大文件支持问题

一些脚本语言似乎对大文件偏移量有不完整的支持,这取决于它们是在32-/64位操作系统或处理器上运行,还是需要使用某些标志进行专门编译

所以我还是想尝试一下node.js,但谷歌搜索发现它对64位偏移量的大文件的支持(或者它的库/框架支持等)都不多

我意识到,在某种程度上,这至少取决于JavaScript的底层整数支持。如果我读对了,JavaScript似乎在内部甚至对整数使用浮点,因此

最大的精确积分值为253

然后,node.js同样适用于服务器,服务器应该需要大文件支持

node.js是否支持64位文件偏移量?


更新

尽管有
\u LARGEFILE\u SOURCE
\u FILE\u OFFSET\u BITS
构建标志,但现在我已经开始移植需要它的项目,我发现
fs.read(files.d.fd,chunk,0,1023,0x7fffffff,function(err,bytesRead,data)
成功,但
0x8000000
EINVAL
而失败。这是在32位Windows 7上运行的版本
v0.6.11
时出现的

到目前为止,我还不确定这是否只是
fs
中的一个限制,node.js中的一个bug,还是仅在Windows版本中存在的问题


是否打算在所有平台上的所有核心模块的node.js中使用大于31位的文件偏移量?所有平台上的node.js都是使用_LARGEFILE_SOURCE和_file_OFFSET_位编译的,因此在内部,它对于大文件访问应该是安全的。(请参阅SOURCE dir根目录中的。)


就库而言,在创建读写流时,它使用数字作为
开始
(和
结束
)选项(请参见fs.createReadStream)。这意味着您可以通过节点寻址到位置2^53(如下所示:也相关:)这在
lib/fs.js
代码中可见。

跟踪有点困难,但node.js自2012年5月底(不稳定)以来仅支持64位文件偏移量。在稳定版本中,自2012年6月底开始

fs:fs调用的64位偏移量(Igor Zinkovsky)

在早期版本中,当使用较大偏移量时,故障模式会有所不同,从静默搜索到文件开头,再到使用
EINVAL
引发异常

请参阅(现已关闭)错误报告:

从node.js代码以编程方式检查大文件支持

if (process.version.substring(1).split('.') >= [0,7,9]) {
  // use 64-bit file offsets...
}

您能否给出一个代码示例,说明您试图实现的可能会中断的功能?我还不知道节点的io libs,但伪代码应该是这样的:
offset=getOffsetFromIndex(…);dumpFile.seek(offset);line=dumpFile.readLine()
我不知道这是否很有帮助,这完全是文件偏移量的通用用法。基本上,我有一个任意索引,它可以是巨大的。我有一套工具,可以创建这些索引文件,并使用它们从转储文件中提取任意信息,而不必解析大量GB的XML.Perl和C,直到n哦。是的,这应该是完全受支持的。给它一个摇摆和错过,看看会发生什么。此外,要做链接,你必须使URL看起来像一个URL,即://dumps.wiki…或…该死的从谷歌浏览器URL栏剪切粘贴(;@jcolebrand:是的,我打开了一个新标签,输入了
dumps
,等待URL栏找到相关的URL,使用向下箭头找到正确的URL,然后按CTRL+C组合键而没有实际进入页面。我知道Chrome会在你实际进入页面时获得
http://
部分。我有发现边缘案例的天赋(;谢谢,乔-你链接到了我刚才提到的同一个相关问题(;哈,我完全没有注意到。我只是想找到一些东西来覆盖答案的这一部分……实际上,
\u LARGEFILE\u SOURCE
/
\u FILE\u OFFSET\u BITS
中似乎没有提到,除非有多个这样的文件,而我看到的是错误的?
\:
啊!它们是从lib继承而来的现在是uv。我们落后了几转,我用的是我的本地源代码树。