使用 Node 缓冲大型 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

我做错了什么?

这似乎不是将 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());

我正在投票这个问题,以防有人有更好的解决方案。

最新更新