【发布时间】:2013-12-16 21:20:33
【问题描述】:
JSON.stringify 显然不节省空间。使用 Node.js 序列化和存储 float32array 最优雅的方法是什么?
编辑:人们关闭问题的原因是“基于意见”和“对问题缺乏了解”。我真的相信第一个是missclick。对于第二个,也许这更清楚:
var fs = require("fs");
var len = 1000*1000*10;
var big_array = new Float32Array(len);
for (var i=0; i<len; ++i)
big_array[i] = Math.random();
// OBVIOUSLY NOT SPACE EFFICIENT \/
fs.writeFileSync("big_array.json",JSON.stringify(big_array));
它不节省空间,因为您将数字表示为字符串,因此 8 字节浮点数将使用多达 ~20 个 utf8 字符,这是一种浪费。问题是:如何以节省空间的方式存储数组?
【问题讨论】:
-
到目前为止你尝试过什么?说到序列化,什么是“优雅”?
-
将优雅理解为您应该制定的标准,就像 JSON.stringify 是序列化任意数据的预期方式一样。
-
关于您对关闭原因的编辑:当您要求“优雅”时,这会转化为意见。您是否尝试过保存数组的
buffer属性?这只是字节。 -
也许使用
buf.writeFloat*并将缓冲区保存到磁盘? -
我对此也很感兴趣。我需要这个从节点存储并从浏览器中检索 Float32Array。我不能依赖 JSON,因为如果数组太大,比如 1M 的浮点值,它很容易达到很多 MB(例如,我刚刚尝试序列化一个 220k 值的数组,它被序列化为 2.3 的 JSON MB)
标签: arrays node.js serialization