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

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

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

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

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

只是想把ASN.1投入到这个组合中。 ASN.1是一种格式标准,但是大多数语言都有库,而asn1c的C接口比协议缓冲区的C接口要清晰得多。

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

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

查看Hessian

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

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

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

很少有你需要考虑的事情

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

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