使用节点

时间:2017-05-18 18:14:18

标签: javascript arrays node.js

我想缓冲一个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

我做错了什么?

1 个答案:

答案 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());

如果有人有更好的解决方案,我会投票给这个问题。