如何有效地将数字数据写入文件?

时间:2017-01-31 07:50:17

标签: javascript node.js file

假设我有一个包含一百万个随机数的数组:

[ 0.17309080497872764, 0.7861753816498267, ...]

我需要将它们保存到磁盘,稍后再回读。我可以用JSON或csv等文本格式存储它们,但这会浪费空间。我更喜欢二进制格式,其中每个数字在磁盘上只占用8个字节。

如何使用节点执行此操作?

更新

在所谓的重复问题中,我没有找到这个具体问题的答案,并附有一个完整的例子。我能够自己解决这个问题,但是以一种冗长的方式可以肯定地得到改善:

// const a = map(Math.random, Array(10));
const a = [ 
  0.9651891365487693,
  0.7385397746441058,
  0.5330173086062189,
  0.08100066198727673,
  0.11758119861500771,
  0.26647845473863674,
  0.0637438360410223,
  0.7070151519015955,
  0.8671093412761386,
  0.20282735866103718
];

// write the array to file as raw bytes (80B total)
var wstream = fs.createWriteStream('test.txt');
a.forEach(num => {
  const b = new Buffer(8);
  b.writeDoubleLE(num);
  wstream.write(b);
})
wstream.end(() => {
  // read it back
  const buff = fs.readFileSync('test.txt');
  const aa = a.map((_, i) => buff.readDoubleLE(8*i));
  console.log(aa);
});

1 个答案:

答案 0 :(得分:0)

我认为这已在Read/Write bytes of float in JS

中得到解答

ArrayBuffer解决方案可能正是您所寻找的。