我正在考虑将我的一些跨平台脚本移植到 node.js,部分原因是为了学习 node.js,部分原因是我现在对 JavaScript 更加熟悉,部分原因是其他脚本语言对大文件的支持存在问题。
一些脚本语言似乎对大文件偏移有不完整的支持,这取决于它们是否在 32 位/64 位操作系统或处理器上运行,或者是否需要使用某些标志进行专门编译。
因此,无论如何我都想尝试使用 node.js,但是在谷歌搜索中,我在它对 64 位偏移量的大文件的支持(或者它的库/框架支持等)方面都没有找到太多的方法。
我意识到这在某种程度上至少取决于 JavaScript 的底层整数支持。如果我正确阅读了什么是 JavaScript 的 Max Int?Number 可以达到的最高 Integer 值是多少而不会丢失精度?似乎 JavaScript 在内部甚至对整数也使用浮点数,因此
最大精确整数值为 2 53
再一次,node.js 是为服务器设计的,服务器应该期望支持大文件。
node.js 是否支持 64 位文件偏移?
更新
尽管有_LARGEFILE_SOURCE
and _FILE_OFFSET_BITS
build 标志,现在我已经开始移植需要这个的项目,我发现它fs.read(files.d.fd, chunk, 0, 1023, 0x7fffffff, function (err, bytesRead, data)
成功但0x80000000
失败了EINVAL
. 这是v0.6.11
在 32 位 Windows 7 上运行的版本。
到目前为止,我不确定这是否仅是 .js 中的限制fs
、node.js 中的错误,还是仅 Windows 版本中的问题。
是否打算在所有平台上的所有核心模块中的 node.js 中使用大于 31 位的文件偏移量?