C++ 是C++;boost二进制序列化库向后/向前兼容?

C++ 是C++;boost二进制序列化库向后/向前兼容?,c++,serialization,boost,C++,Serialization,Boost,可能重复: 我试图找到一个C++应用程序的序列化解决方案。我非常希望能够使用boost二进制序列化。如果我使用较旧版本的boost二进制序列化库序列化对象,那么使用较新版本的boost库的应用程序是否始终能够读取它?反之亦然?boost在序列化库的向后/兼容性方面的理念是什么?他们通过增加标题中的版本来实现。所以,是的,从某种意义上讲,它是兼容的,如果您试图读取以不兼容版本序列化的二进制数据,您将获得一个优雅的失败,正如您所指出的那样。此外,在1.42和1.43中还有一些bug破坏了它 在版本

可能重复:


我试图找到一个C++应用程序的序列化解决方案。我非常希望能够使用boost二进制序列化。如果我使用较旧版本的boost二进制序列化库序列化对象,那么使用较新版本的boost库的应用程序是否始终能够读取它?反之亦然?boost在序列化库的向后/兼容性方面的理念是什么?

他们通过增加标题中的版本来实现。所以,是的,从某种意义上讲,它是兼容的,如果您试图读取以不兼容版本序列化的二进制数据,您将获得一个优雅的失败,正如您所指出的那样。此外,在1.42和1.43中还有一些bug破坏了它

在版本1.42和1.43下创建的本机二进制存档存在严重问题。最新版本很可能无法阅读。这是因为1.42对某些类型的二进制格式做了一些更改。通常,这可以通过检测写入存档头中的库版本号来解决。不幸的是,这个库版本号并没有像应该的那样增加到1.42。现在我们有了两个不同的二进制存档版本,具有相同的库版本号

我个人更相信它:

您可以在不破坏向后兼容性的情况下向消息格式添加新字段;解析时,旧的二进制文件会忽略新字段


但是,它需要在构建系统方面付出更多的努力,因为它涉及到使用自动生成的代码。

这可能是重复的,但没有令人满意的答案。@julkiewicz是的,加上OP还不能就现有问题提供悬赏。呃,如果没有好的副本,为什么会关闭这个窗口呢?不过,Boost.serialization也允许对数据进行版本控制(尽管承认它没有那么“神奇”);但是,虽然boost.serialization的不同版本可以对同一类定义使用不同的wire格式,但protobufs wire格式已发布,并且似乎没有更改。@Alex B,当对象总大小在30MB到1GB之间时,是否建议使用GPB作为文档格式?