gpt4 book ai didi

javascript - 在 JSON 对象中发送 Uint8Array (BSON)

转载 作者:行者123 更新时间:2023-11-28 10:42:56 25 4
gpt4 key购买 nike

我正在使用'bson ' 浏览器中的 npm 包,用于将 JSON 对象转换/序列化为 BSON。文档说它返回一个 Node.js 缓冲区。 Node.js 的文档说缓冲区的类型为“Uint8Array”。现在我想在另一个 JSON 对象 (infoJSON) 中发送这个 Uint8Array,但 JSON 不支持 Uint8Array。我尝试将缓冲区 (Uint8Array) 转换为简单数组,将其插入到 JSON 对象 (infoJSON) 中,然后直接从 JSON 对象将其转换回 Uint8Array。但是这个新的 Uint8Array 无法反序列化回原来的 person 对象(参见结果)。坏了。

为什么我使用 BSON?我想将原始对象分割成多个 block ,以通过具有数据大小限制的WebRTC数据通道发送它。我需要能够识别每个 block (类型)。这就是我使用嵌套对象的原因。

  var personJSON = { 'name': 'sarah' } // JSON
var personBuffer = Bson.serialize(personJSON) // Uint8Array
var personArray = Array.from(personBuffer) // Simple array
var infoJSON = { 'count': 1, 'person': personArray } // Inserting array into JSON
var personUint8Array = Uint8Array.from(infoJSON.person) // Converting array back to Uint8Array
console.log('deserializedObj:')
console.log(Bson.deserialize(personUint8Array))

结果:

result

最佳答案

这是因为Bson.serialize and Bson.deserialize use a Node.js like Buffer object .

您可以通过使用底层 ArrayBuffer 创建一个 Uint8Array ( test online ) 并使用 Buffer.from 来纠正此问题:

var personJSON = { 'name': 'sarah' } // JSON
var personBuffer = new Uint8Array(Bson.serialize(personJSON).buffer) // Uint8Array
var personArray = Array.from(personBuffer) // Simple array
var infoJSON = { 'count': 1, 'person': personArray } // Inserting array into JSON
var personUint8Array = Uint8Array.from(infoJSON.person) // Converting array back to Uint8Array
console.log('deserializedObj:')
console.log(Bson.deserialize(Buffer.from(personBuffer)))

关于javascript - 在 JSON 对象中发送 Uint8Array (BSON),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49259231/

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