【问题标题】:Is the C++ boost binary serialization library backward/foward compatible? [duplicate]C++ boost 二进制序列化库是否向后/向前兼容? [复制]
【发布时间】:2011-11-26 20:20:09
【问题描述】:

可能重复:
Boost Serialization Library upgrade

我正在尝试为 C++ 应用程序寻找序列化解决方案。我真的很希望能够使用 boost 二进制序列化。如果我要使用旧版本的 boost 二进制序列化库来序列化一个对象,那么使用新版本的 boost 库的应用程序是否总是能够读取它?反过来呢? boost 对序列化库的向后/兼容性的理念是什么?

【问题讨论】:

  • 这将是重复的,但它没有令人满意的答案。
  • @julkiewicz 是的,而且 OP 还没有能力对现有问题提供赏金。
  • 呃,没有好的副本为什么要关闭?

标签: c++ serialization boost


【解决方案1】:

他们通过增加标题中的版本来做到这一点。所以是的,从某种意义上说,它是兼容的,如果您尝试读取使用不兼容版本序列化的二进制数据,就像1.45.0 release notes 倾向于指出的那样,您将得到一个正常的失败。而且 1.42 和 1.43 中的 bug 会破坏它!

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

我个人会更相信Google Protocol Buffers,它是explicitly maintains backwards compatibility

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

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

【讨论】:

  • Boost.serialization 也允许对您的数据进行版本控制(尽管不可否认它不那么“神奇”);然而,虽然不同版本的 boost.serialization 可以为 same 类定义使用不同的线格式,但 protobufs 线格式已发布并且似乎没有改变。
  • @Alex B,是否建议使用 GPB 作为总对象大小在 30MB 到 1GB 之间的文档格式?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-24
  • 2020-10-15
  • 1970-01-01
  • 1970-01-01
  • 2021-07-22
  • 1970-01-01
相关资源
最近更新 更多