16

我正在研究一种用于序列化数据的机制,该机制以独立于语言的机制通过套接字或共享内存传递。我不愿意使用 XML,因为这些数据将非常结构化,并且编码/解码速度至关重要。拥有一个良好的自由许可的 C API 很重要,但理想情况下应该支持大量其他语言。我查看了谷歌的协议缓冲区ASN.1。我在正确的轨道上吗?有更好的吗?我应该只实现自己的打包结构而不寻找一些标准吗?

4

10 回答 10

11

鉴于您的要求,我会选择 Google Protocol Buffers。听起来它非常适合您的应用程序。

于 2008-09-27T20:47:58.147 回答
3

你可以考虑 XDR。它有一个RFC。我已经使用过它,并且从未遇到过任何性能问题。它在 ONC RPC 中使用,并带有一个名为 rpcgen 的工具。当您只想序列化数据时,自己创建一个生成器也很容易(出于便携性原因,我最终这样做了,花了我半天时间)。有一个开源 C 实现,但它可能已经在系统库中,因此您不需要源代码。

ASN.1 对我来说总是有点巴洛克式的,但根据您的实际需要可能更合适,因为 XDR 有一些限制。

于 2008-09-27T21:21:25.460 回答
3

只是想在这个组合中加入 ASN.1。ASN.1 是一种格式标准,但大多数语言都有库,通过asn1c的C 接口比协议缓冲区的 C 接口干净得多。

于 2008-09-29T17:12:19.553 回答
2

JSON 真的是我最喜欢这类东西的地方。不过,我之前没有使用二进制文件的经验。如果您打算使用 JSON,请发布您的结果!

于 2008-09-27T23:14:11.977 回答
2

Thrift是 Facebook 创建的二进制格式。 这是与谷歌协议缓冲区的比较。

于 2008-09-27T23:46:44.113 回答
1

看看黑森州

于 2008-09-27T20:49:14.790 回答
1

还有二进制 XML,但似乎还没有稳定下来。我链接到的文章提供了一堆可能感兴趣的链接。

于 2008-09-27T22:03:37.670 回答
1

另一种选择是SNAC/TLV,AOL 在其 Oscar/AIM 协议中使用它。

于 2008-09-27T22:50:30.130 回答
1

还检查肌肉。虽然它做了很多,但它序列化为二进制格式。

于 2008-09-28T00:12:13.850 回答
0

您需要考虑的几件事

1. Storage
2. Encoding Style (1 byte 2 byte)
3. TLV standards

ASN.1 解析器非常适合二进制表示,最好的部分是 ASN.1 是一种成熟的技术,在 ITU-T 内部和外部都广泛使用。许多软件供应商都支持这种表示法。

于 2013-09-10T06:04:17.993 回答