如何将ArrayBuffer序列化为BSON对象,以便在javascript中进行websocket传输

时间:2013-04-11 06:07:21

标签: javascript node.js mongodb bson arraybuffer

我想将带有 ArrayBuffer元素 javascript对象编码到BSON并通过websocket传输。然而,序列化的BSON对象比它应该大10倍。

代码是这样的:

var A = {buffer: new ArrayBuffer(1024)};

bson_buffer_size = BSON.calculateObjectSize(A) // returns 9164, I am expecting ~1024

我对BSON序列化器的理解一定是错的。有谁知道我如何用二进制缓冲区字段创建一个紧凑的BSON对象?

1 个答案:

答案 0 :(得分:-1)

查看js-bson实现,看起来它在内部使用ArrayBuffer来生成序列化数据,但是如果不支持将ArrayBuffers序列化为二进制数据,那么它将它视为对象

例如,如果您通过序列化循环运行它,那么这就是您得到的输出:

BSON.deserialize(BSON.serialize({buffer: new ArrayBuffer(1024)}));

// Outputs:
{
  buffer: {
    '0': 0,
    '1': 0,
    // And so on
    '1023': 0,
    byteLength: 1024
  }
}

为什么不直接通过websocket转移ArrayBuffer而不是编码呢? Websockets可以直接传输二进制数据,无需任何额外的编码。您可能需要做一些工作,因为您必须将其他属性作为单独的对象发送,但这可能不是世界末日。