Скажем, у меня есть массив, содержащий миллион случайных чисел:Как я могу эффективно записывать числовые данные в файл?
[ 0.17309080497872764, 0.7861753816498267, ...]
Мне нужно, чтобы сохранить их на диск, чтобы прочитать позже. Я мог бы хранить их в текстовом формате, таком как JSON или csv, но это будет пустым пространством. Я бы предпочел двоичный формат, где каждый номер занимает всего 8 байт на диске.
Как это сделать с помощью узла?
UPDATE
Я не нашел ответа на этот конкретный вопрос, с полным, например, в якобы дубликата вопрос. Я был в состоянии решить это сам, но в многословной таким образом, что, безусловно, может быть улучшен:
// 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);
});
Возможный дубликат [Чтение/запись байтов с плавающей точкой в JS] (http://stackoverflow.com/questions/4414077/read-write-bytes-of-float-in-js) –