我有一个关于数据结构序列化的问题.数据结构的序列化有许多可能性(也称为编组或放气,请参阅wiki-article).每种编程语言,框架,标准或库似乎都带有自己的序列化方法.许多人还定义了他们自己的数据/接口描述语言(我更喜欢语言依赖于仅在代码内部定义的数据结构).仅举几例(参见wiki文章):COM IDL,CORBA IDL,Thrift IDL,谷歌协议缓冲区".proto",XSD,ASN.1 IDL等.其中一些序列化能够生成语言本机数据结构和代码,用于序列化和反序列化这些结构.
我做了一些关于这个问题的研究,但我还是犹豫不决.所以我的问题是:我 应该使用哪种序列化?
我的要求:可扩展性,空间效率(至少是二进制),高效的数据访问,易于使用(可能使用生成的代码和getter和setter)和c ++ - 兼容性.
可扩展性应提供前向和后向兼容性.更具体地说,我写的数据格式通常会随着时间的推移而增长,因为我添加了新的数据字段,这在开发开始时是无法预见的.现在我希望能够使用更新的软件版本从过时的格式读取存储的数据,旧的存储数据中找不到的数据字段可以用默认值或其他东西填充.另一方面,我希望能够读取用新描述写的数据.然后,应使用"旧"数据描述编译的软件忽略未知数据字段(可能会生成一些警告).
有任何重组吗?关于该主题的进一步阅读的推荐也将受到赞赏.
---编辑---
1)boost :: serialization似乎很受欢迎.它有一些非常好的功能,文档非常好,蚂蚁的语法似乎很直接.也许我有点挑剔,但有一些我不喜欢的东西:我看不出它如何处理前向兼容性(见4).我更喜欢生成代码.
2)google protobuf似乎更符合我的需求,但我还没有深入研究它们的深度.他们似乎很好地处理前向和后向兼容性(见5).他们有不同语言的代码生成器,开发人员也知道非常类似的概念(参见FAQ).我将深入了解protobufs.
3)提升精神似乎不是我搜索的东西.