我正在研究一种用于序列化数据的机制,该机制以独立于语言的机制通过套接字或共享内存传递。我不愿意使用 XML,因为这些数据将非常结构化,并且编码/解码速度至关重要。拥有一个良好的自由许可的 C API 很重要,但理想情况下应该支持大量其他语言。我查看了谷歌的协议缓冲区和ASN.1。我在正确的轨道上吗?有更好的吗?我应该只实现自己的打包结构而不寻找一些标准吗?
10 回答
鉴于您的要求,我会选择 Google Protocol Buffers。听起来它非常适合您的应用程序。
你可以考虑 XDR。它有一个RFC。我已经使用过它,并且从未遇到过任何性能问题。它在 ONC RPC 中使用,并带有一个名为 rpcgen 的工具。当您只想序列化数据时,自己创建一个生成器也很容易(出于便携性原因,我最终这样做了,花了我半天时间)。有一个开源 C 实现,但它可能已经在系统库中,因此您不需要源代码。
ASN.1 对我来说总是有点巴洛克式的,但根据您的实际需要可能更合适,因为 XDR 有一些限制。
只是想在这个组合中加入 ASN.1。ASN.1 是一种格式标准,但大多数语言都有库,通过asn1c的C 接口比协议缓冲区的 C 接口干净得多。
JSON 真的是我最喜欢这类东西的地方。不过,我之前没有使用二进制文件的经验。如果您打算使用 JSON,请发布您的结果!
看看黑森州
还有二进制 XML,但似乎还没有稳定下来。我链接到的文章提供了一堆可能感兴趣的链接。
另一种选择是SNAC/TLV,AOL 在其 Oscar/AIM 协议中使用它。
还检查肌肉。虽然它做了很多,但它序列化为二进制格式。
您需要考虑的几件事
1. Storage
2. Encoding Style (1 byte 2 byte)
3. TLV standards
ASN.1 解析器非常适合二进制表示,最好的部分是 ASN.1 是一种成熟的技术,在 ITU-T 内部和外部都广泛使用。许多软件供应商都支持这种表示法。