我正在尝试将一个非常大的数据块(由 JSON.stringify 产生)写入文件。它必须是同步的,因为我想在 process:exit 事件期间保存它。但是,当使用 fs.writeFileSync() 时,Node 会抛出以下消息:
FATAL ERROR: JS Allocation failed - process out of memory
我试过 fs.createWriteStream(),但它似乎不起作用。此代码输出 0 字节,数据量中等,大则抛出相同的错误。
我正在尝试将一个非常大的数据块(由 JSON.stringify 产生)写入文件。它必须是同步的,因为我想在 process:exit 事件期间保存它。但是,当使用 fs.writeFileSync() 时,Node 会抛出以下消息:
FATAL ERROR: JS Allocation failed - process out of memory
我试过 fs.createWriteStream(),但它似乎不起作用。此代码输出 0 字节,数据量中等,大则抛出相同的错误。
我认为你需要的是一个“泵”。像http://elegantcode.com/2011/04/06/taking-baby-steps-with-node-js-pumping-data-between-streams/这样的东西会减轻你的内核缓冲区,他们不必持有所有一直是文字。
我的问题出在 JSON.stringify 中。数据太大而无法存储在唯一的 JavaScript 字符串中。
我通过每行序列化一个属性解决了这个问题(因此对 JSON.stringify 有 X 次调用,其中 X 是我的对象中的属性数)。我的反序列化器通过添加每个属性来重建对象。