Javascript读取大文件失败

sup*_*idQ 3 javascript io file

JSON文件为6 GB。使用以下代码阅读时,

var fs = require('fs');
var contents = fs.readFileSync('large_file.txt').toString();
Run Code Online (Sandbox Code Playgroud)

它具有以下错误:

buffer.js:182
    throw err;
    ^

RangeError: "size" argument must not be larger than 2147483647
    at Function.Buffer.allocUnsafe (buffer.js:209:3)
    at tryCreateBuffer (fs.js:530:21)
    at Object.fs.readFileSync (fs.js:569:14)
    at Object.<anonymous> (/home/readHugeFile.js:4:19)
    at Module._compile (module.js:569:30)
    at Object.Module._extensions..js (module.js:580:10)
    at Module.load (module.js:503:32)
    at tryModuleLoad (module.js:466:12)
    at Function.Module._load (module.js:458:3)
    at Function.Module.runMain (module.js:605:10)
Run Code Online (Sandbox Code Playgroud)

有人可以帮忙吗?

rob*_*lep 6

最大尺寸的Buffer,这是readFileSync()内部用来存放文件数据,约为2GB(来源:https://nodejs.org/api/buffer.html#buffer_buffer_kmaxlength)。

您可能需要像这样的流式JSON解析器JSONStream来处理文件:

const JSONStream = require('JSONStream');
const fs         = require('fs');

fs.createReadStream('large_file.json')
  .pipe(JSONStream.parse('*'))
  .on('data', entry => {
    console.log('entry', entry);
  });
Run Code Online (Sandbox Code Playgroud)

  • 对于今天的标准,最大2GB的缓冲区似乎太小了。有谁知道如何增加呢?为什么必须这么小?这是Javascript(v8)本身的基本限制吗? (2认同)