我想缓冲一个2D数组。我的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
我做错了什么?
答案 0 :(得分:0)
这似乎不是将2D数组转换为Buffer的正确方法。 我尝试使用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());
如果有人有更好的解决方案,我会投票给这个问题。