【问题标题】:Binary serialization of arbitrary objects beween Objective C and C#?Objective C和C#之间任意对象的二进制序列化?
【发布时间】:2013-09-04 07:51:19
【问题描述】:

我们希望在 Objective C 和 C# 之间有效地传递一个森林 - 一个包含以下值的字典:字典、数组、集合、数字、字符串、字节缓冲区(在时间方面,空间是一个较小的问题)。 Google 的 Protocol Buffers 看起来不错,但它们似乎只处理结构化数据,而我们的则是任意的。最终我们可以自己编写一个二进制(反)序列化器,但这肯定是之前完成的,并在某个地方作为 FOSS 发布?

【问题讨论】:

  • 为什么是二进制?否则 JSON 将是显而易见的选择。如果您需要在带宽受限的介质上传输大量数据:JSON,然后进行压缩。
  • 使用“标记联合”消息(带有枚举值的消息,说明它是什么类型的值,然后每种类型都有一个字段)协议缓冲区可以非常灵活地表示数据。
  • @JonSkeet 它甚至不需要被标记,考虑一下 - 只需检查哪个有值。当然,它也不会是正常意义上的真正的union...
  • @Richard,字符串操作可能很慢,尤其是在处理字节缓冲区时(我们不想开始搞乱 base64)。
  • @JonSkeet,有意思,我再看看。

标签: c# objective-c serialization unity3d binary-serialization


【解决方案1】:

您是否考虑过使用 ASN.1?由于 ASN.1 独立于编程语言或系统架构,因此无论您需要 C、C#、C++ 还是 Java,都可以有效地使用它。

您创建一个您希望交换的信息的描述,并使用 ASN.1 工具为您的目标编程语言生成一个编码器/解码器。 ASN.1 还支持一些不同的日期传输规则,范围从高效的 PER(打包编码规则)到冗长但灵活的 XER(XML 编码规则)。

要使用 ASN.1 看看这是否适合您,请尝试http://asn1-playground.oss.com 上的免费在线 ASN.1 编译器和编码器/解码器,看看这是否适合您。

【讨论】:

  • 这看起来很有趣,但就学习曲线和工具而言,Google 的 Protocol Buffers 看起来更易于访问。
  • 看看oss.com/asn1/resources/asn1-made-simple/introduction.html 上的“ASN.1 Made Simple”,您会发现 ASN.1 实际上可能比 Google Protocol Buffers 更容易编写。
猜你喜欢
  • 2010-12-17
  • 2011-06-08
  • 2023-03-05
  • 1970-01-01
  • 2011-06-27
  • 2014-01-30
  • 1970-01-01
  • 1970-01-01
  • 2020-09-22
相关资源
最近更新 更多