我想缓冲一个二维数组。我的 2D 数组由浮点数组成,例如:
[
[ 121093.28125, 38477.87890625, 41.57999801635742],
[ 13.859999656677246, -16.51999855041504, 51.20000076293945 ],
...
]
它可以很大,长度可达 100 万。我需要通过缓冲数组将其发送到节点中的子进程。
我的代码是:
// dataAsNumbers is the 2D array thats 10,000 in length
var buf = new Buffer(dataAsNumbers);
child.stdin.write(buf);
在我的孩子过程中:
process.stdin.on('data', function(buf) {
console.log('buf.length is ', buf.length);
var ab = new ArrayBuffer(buf.length);
var view = new Uint8Array(ab);
for (var i = 0; i < buf.length; ++i) {
view[i] = buf[i];
}
console.log('ab[0] is ', ab[0]);
process.exit(0);
});
但是,数组缓冲区未定义:
buf.length is 10000
ab[0] is undefined
我做错了什么?
这似乎不是将 2D 数组转换为缓冲区的正确方法。我尝试使用 10,000 x 10,000 数组,但我的 buf.byteLength 只有 10,000,这是不正确的。
如果我做每一行,那么它可以工作,但是我会失去精度。
如果您必须逐行执行此操作,那么最好的选择是使用 JSON:
// i from 0 - 10,000, send buf to child
var buf = new Buffer(JSON.stringify(dataAsNumbers[i]));
在子进程内:
var dataAsNumbers[i] = JSON.parse(buf.toString());
我正在投票这个问题,以防有人有更好的解决方案。