gpt4 book ai didi

javascript - 如何在javascript中将ArrayBuffer序列化为BSON对象以进行WebSocket传输

转载 作者:可可西里 更新时间:2023-11-01 09:56:16 25 4
gpt4 key购买 nike

我想使用 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对象?

最佳答案

查看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
}
}

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

关于javascript - 如何在javascript中将ArrayBuffer序列化为BSON对象以进行WebSocket传输,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15941789/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com