以与语言无关的二进制格式序列化数据的最佳方法是什么?

时间:2008-09-27 20:46:12

标签: c language-agnostic serialization asn.1

我正在研究一种机制,用于在与语言无关的机制中通过套接字或共享内存传递数据。我不愿意使用XML,因为这些数据将非常结构化,编码/解码速度至关重要。拥有一个获得大量许可的优秀C API非常重要,但理想情况下应该支持大量其他语言。我查看了google's protocol buffersASN.1。我是在正确的轨道上吗?还有更好的东西吗?我应该只实现自己的打包结构而不是寻找一些标准吗?

10 个答案:

答案 0 :(得分:11)

根据您的要求,我会使用Google Protocol Buffers。听起来它非常适合您的应用。

答案 1 :(得分:3)

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

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

答案 2 :(得分:3)

只是想把ASN.1投入到这个组合中。 ASN.1是一种格式标准,但是大多数语言都有库,而asn1c的C接口比C interface for protocol buffers更清晰。

答案 3 :(得分:2)

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

答案 4 :(得分:2)

Thrift是由Facebook创建的二进制格式。 Here's a comparison使用谷歌协议缓冲区。

答案 5 :(得分:1)

查看Hessian

答案 6 :(得分:1)

还有Binary XML但似乎还没有稳定下来。我链接的文章提供了一些可能感兴趣的链接。

答案 7 :(得分:1)

另一个选项是SNAC/TLV,AOL在其Oscar / AIM协议中使用该选项。

答案 8 :(得分:1)

同时查看Muscle。虽然它做了很多,但它序列化为二进制格式。

答案 9 :(得分:0)

你需要考虑几件事

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

ASN.1解析器有利于二进制表示,最好的部分是ASN.1是一种成熟的技术,在ITU-T及其外部广泛使用。该表示法得到了许多软件供应商的支持。