假设我有一个包含一百万个随机数的数组:
[ 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);
});