我正在尝试为C ++应用程序找到序列化解决方案。我真的希望能够使用boost二进制序列化。如果我使用较旧版本的boost二进制序列化序列化对象,那么使用较新版本的boost库的应用程序是否总能读取它?反过来呢? boost对序列化库的向后/兼容性的理念是什么?
答案 0 :(得分:10)
他们通过增加标题中的版本来实现。所以是的,它在某种意义上是兼容的,如果您尝试读取序列化为1.45.0 release notes的不兼容版本的二进制数据,则会出现优雅的失败。此外,1.42和1.43中的错误打破了它!
在版本1.42和1.43下创建的本机二进制存档存在严重问题。这个最新版本可能无法读取它们。这是由于1.42对某些类型的二进制格式进行了一些更改。通常,可以通过检测写入归档头中的库版本号来解决此问题。不幸的是,这个库版本号没有增加到1.42。所以现在我们有两个不同的二进制存档版本,它们具有相同的库版本号。
我个人会更加信任Google Protocol Buffers,explicitly maintains backwards compatibility:
您可以在不破坏向后兼容性的情况下为邮件格式添加新字段;旧的二进制文件在解析时只是忽略新字段。
然而,它需要在构建系统方面付出更多努力,因为它涉及使用自动生成的代码。