【问题标题】:How to decode arrayBuffer from object如何从对象解码arrayBuffer
【发布时间】:2020-08-02 08:29:55
【问题描述】:

我尝试了很多方法来解码由 {"foo":"bar"} 之类的对象组成的 arrayBuffer 这是数组缓冲区:

ArrayBuffer {
  [Uint8Contents]: <5b 6f 62 6a 65 63 74 20 4f 62 6a 65 63 74 5d>,
  byteLength: 15
}

使用最简单的方法TextDecoder 它只返回[object Object] 所以也许问题出在编码器上?我没有想法......我在这里使用这个客户端的发送方法来发送数据:https://www.npmjs.com/package/websocket

那么,如何解码arrayBuffer?谢谢

【问题讨论】:

  • JSON.stringify 在您将其发送到客户端之前。你的解码没问题。它没有在服务器端正确序列化。 Object.toString() 给你那个字符串。
  • 我现在正在做 JSON.stringify,虽然我不知道如何处理对象,但你说除了作为字符串做之外没有什么比“原生”更重要的了?我对二进制/缓冲区期望过高? ://
  • 哦。如果您正在寻找它,您需要找到一个二进制序列化程序。但是,除非您正在处理非常严重的负载或需要优化的特殊需求,否则我会避免这样做的痛苦。数据必须在某个时候序列化,然后在另一端反序列化。对于您的普通 API,您需要二进制序列化是非常值得怀疑的
  • 嗯,我不能接受你的回答,因为它是一个评论......那你能回答吗?这是有道理的,它通过给出指示帮助了我。谢谢!
  • 好的,作为答案发布:)

标签: node.js websocket arraybuffer


【解决方案1】:

在将 JSON.stringify 发送到客户端之前。你的解码没问题。它没有在服务器端正确序列化。 Object.toString() 给你那个字符串。

如果你想以二进制形式发送对象,你需要找到一个二进制序列化程序,如果这是你正在寻找的。但是,除非您正在处理非常严重的负载或需要优化的特殊需求,否则我会避免这样做的痛苦。数据必须在某个时候序列化,然后在另一端反序列化。对于您的普通 API,您需要二进制序列化是非常值得怀疑的

有一些众所周知的二进制序列化选项,如 FlatBuffers、BSON、Thrift、protobuf、Avro、MsgPack 等。我会在 Google 上搜索二进制序列化以找到最新的选项。并且您需要添加到搜索关键字并检查它们是否具有您感兴趣的语言的绑定。

【讨论】:

  • 可能会将所有 json 更改为 protobuf,因为我正在寻找许多 websocket 调用。谢谢你的指点,真的帮了我大忙。
  • 祝你好运!我添加了一些我能想到的二进制序列化选项的列表。
猜你喜欢
  • 1970-01-01
  • 2022-10-03
  • 1970-01-01
  • 2021-12-17
  • 2011-07-15
  • 1970-01-01
  • 2021-05-31
  • 2011-02-05
  • 1970-01-01
相关资源
最近更新 更多