我有一个问题关于serializaton数据结构。数据结构的序列化有很多种可能(也称为编组或缩减,参见wiki-article)。每种编程语言,框架,标准或库似乎都带有自己的序列化方法。许多人还定义了他们自己的数据/接口描述语言(我更喜欢仅在代码内定义的语言依赖数据结构)。只是仅举几例(见wiki-article):COM IDL,CORBA IDL,节俭IDL,谷歌协议缓冲 “.proto”,XSD,ASN.1 IDL,等等。其中一些序列化能够生成语言原生数据结构和用于序列化和反序列化这些结构的代码。易于使用的可扩展序列化/编组?
我做了关于这个问题的一些研究,但我仍然未定。所以我的问题是: 我应该使用哪种序列化?
我要求:扩展,空间效率(至少二进制),高效地访问数据,安心使用(可能与所生成的代码和吸气剂和setter)和C++ - 保持兼容。
可扩展性应提供向前和向后兼容性。更具体地说,我写的数据格式通常会随着时间的推移而增长,因为我添加了新的数据字段,这在开发之初我无法预见。现在,我希望能够使用较新的软件版本读取过时格式的存储数据,旧的存储数据中找不到的数据字段可以使用默认值或其他值填充。另一方面,我希望能够读取使用新描述书写的数据。未知数据字段应该被用“旧”数据描述编译的软件忽略(可能会产生一些警告)。
任何推荐?关于该主题的进一步阅读推荐,也将不胜感激。
---编辑---
1)的boost ::序列化似乎是相当受欢迎的。 它有一些非常好的功能,文档非常好,谚语似乎很直截了当。也许我有点挑剔,但也有一些我不喜欢的东西:我不明白它如何处理向前兼容(见4)。我宁愿生成的代码。
2)谷歌protobuf似乎适合我的需要更好,但我没有看着他们的深度。他们似乎很好地处理向前和向后的可塑性(参见5)。他们有用于不同语言的代码生成器,开发人员知道类似的概念(请参阅FAQ)。我将深入研究protobufs。
3)提升精神似乎并没有成为我寻找的东西。
是的,不幸的是前向兼容性缺乏boost :: serialization。另外,在以前的boost :: serialization版本中,我在Mac和PC上生成的XML文件中遇到了一些细微的差异,所以对于该格式的完美兼容性也存在疑问。挖掘Protobuf听起来像是最好的主意,请告诉它走向何方。 – 2011-03-01 18:59:58