2011-09-28 151 views
12

可能重复:
Boost Serialization Library upgradeC++ boost二进制序列化库向后/向后兼容?

我试图找到一个C++应用程序序列化的解决方案。我真的很想能够使用boost二进制序列化。如果我要使用较旧版本的boost二进制序列化库序列化一个对象,那么使用更新版本的boost库的应用程序是否总是能够读取它?反之亦然呢?序列化库的后向/兼容性是什么?

+2

这将是一个重复,但它没有满意的答案。 – julkiewicz

+0

@julkiewicz是的,再加上OP还没有在现有问题上提供赏金的立场。 –

+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

您可以添加新的字段到您的报文格式不破坏向后兼容;解析时旧的二进制文件简单地忽略新字段。

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

+0

+1你的意见:P –

+0

虽然Boost.serialization允许版本化你的数据,虽然(虽然承认它不那么“神奇”);然而,虽然boost.serialization的不同版本可以为_same_类定义使用不同的连线格式,但是protobufs连线格式已发布且看起来不会改变。 – bacar

+0

@Alex B,建议使用GPB作为文档格式,其中对象大小在30MB到1GB之间? –