以独立于语言的二进制格式序列化数据的最佳方法是什么?
时间:2020-03-06 14:49:53 来源:igfitidea点击:
我正在研究一种与语言无关的机制,用于序列化要通过套接字或者共享内存传递的数据的机制。我不愿意使用XML,因为此数据将具有非常结构化的功能,并且编码/解码速度至关重要。拥有一个获得自由许可的良好C API很重要,但是理想情况下,应该支持许多其他语言。我看过Google的协议缓冲区和ASN.1. 我在正确的轨道上吗?有更好的东西吗?我应该只实现自己的打包结构,而不寻求某种标准吗?
解决方案
根据要求,我会选择Google协议缓冲区。听起来它非常适合应用程序。
看看黑森州
我们可以考虑使用XDR。它具有RFC。我用过它,从来没有任何性能问题。它用在ONC RPC中,具有一个,并带有一个称为rpcgen的工具。当我们只想序列化数据时,也很容易自己创建一个生成器(这是我出于可移植性的原因最终花了我半天的时间完成)。
有一个开放源代码的C实现,但是它已经可以在系统库中,因此我们不需要这些源代码。
ASN.1在我看来总是有点巴洛克式,但是根据实际需求可能更合适,因为XDR有一些限制。
也有二进制XML,但它似乎尚未稳定。我链接到的文章提供了很多可能感兴趣的链接。
另一个选择是SNAC / TLV,AOL在其Oscar / AIM协议中使用了SNAC / TLV。
JSON实际上是我最喜欢的这类东西。虽然我没有二进制方面的经验。如果我们打算使用JSON,请发布结果!
Thrift是Facebook创建的一种二进制格式。这是与Google协议缓冲区的比较。
同时检查肌肉。尽管它做了很多,但它会序列化为二进制格式。
只是想将ASN.1加入到这种混合中。 ASN.1是一种格式标准,但是大多数语言都有库,并且通过asn1c编写的C接口比协议缓冲区的C接口干净得多。