2017-01-31 6 views
0

Скажем, у меня есть массив, содержащий миллион случайных чисел:Как я могу эффективно записывать числовые данные в файл?

[ 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); 
}); 
+0

Возможный дубликат [Чтение/запись байтов с плавающей точкой в ​​JS] (http://stackoverflow.com/questions/4414077/read-write-bytes-of-float-in-js) –

ответ

Смежные вопросы