gpt4 book ai didi

node.js/v8 将大文件读入内存

转载 作者:搜寻专家 更新时间:2023-10-31 22:34:37 24 4
gpt4 key购买 nike

问题

如何在 node.js 下将大于 1.1 GB 的文件读取到内存中?

例子

我正在尝试使用 node.js 下的 topojson 将 > 1.1 GB 的 GeoJSON 文件转换为 TopoJSON 格式。

$ topojson -o outfile.json larger_than_one_point_one_GB_input_file.json

(以上适用于最大 517 MB 的文件)

导致如下错误

buffer.js:242
this.parent = new SlowBuffer(this.length);
^
RangeError: length > kMaxLength
at new Buffer (buffer.js:242:21)
at Object.fs.readFileSync (fs.js:200:14)
at /usr/local/share/npm/lib/node_modules/topojson/bin/topojson:61:26
at Array.forEach (native)
at Object.<anonymous> (/usr/local/share/npm/lib/node_modules/topojson/bin/topojson:60:8)
at Module._compile (module.js:449:26)
at Object.Module._extensions..js (module.js:467:10)
at Module.load (module.js:356:32)
at Function.Module._load (module.js:312:12)
at Module.runMain (module.js:492:10)

到目前为止我尝试了什么

  • 广泛搜索
  • 命令行内存设置
    • --max-stack-size=2147000000
    • --max_executable_size=2000
    • --max_new_space_size=2097152
    • --max_old_space_size=2097152
  • 自定义将最新的 v8 版本编译到自定义的 node.js 安装中

版本

  • node.js: v0.8.15
  • v8:3.11.10.25

最佳答案

问题是因为topojson使用fs.readFileSync读取整个文件。它所做的是打开一个大小为(文件长度)的缓冲区,然后将其填满。但是 Node 缓冲区 have a maximum size 0x3FFFFFFF 字节,或 1GB - 1 字节。所以你得到了那个异常(exception)。

解决方案?打开 topojson 源并将 readFileSync 替换为不会将整个文件作为一个 block 读取的流方法。或者,如果您感觉真的很黑,也许可以使用更大的 kMaxLength 常量重新编译 Node ...

关于node.js/v8 将大文件读入内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14265558/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com