文件中的二进制差异导致无法使用反序列化对象

时间:2014-03-27 14:12:24

标签: serialization boost unicode

我有一个问题,很难制定。我有提升序列化对象,我需要创建相同的对象。第一个对象是在不同的机器上创建的(但具有相同的架构)。 序列化/反序列化代码没有改变。

新对象本身是正常序列化的。它们都正常反序列化。 对象具有相同的确切大小。内容上至多相同。

对象是一堆unicode UTF8字符串(带有一些附加信息)。

但是旧的对象程序工作正常,并且使用新的程序 - 它不是。

两个序列化文件的二进制差异示例: bin diff of two objects

任何建议都会很棒。

2 个答案:

答案 0 :(得分:1)

我发现了问题(感谢我的同事们):问题是第一个文件是使用gcc标志“-funsigned-char”编译的程序序列化的,第二个是在没有它的情况下编译的程序。当此标志同步时,输出相同。

答案 1 :(得分:0)

二进制序列化归档实际上并不可移植。见这里:http://www.boost.org/doc/libs/1_55_0/libs/serialization/doc/todo.html#portablebinaryarchives

这可能包括跨版本甚至构建库的序列化(因为不同的编译器选项可能会导致不同的输出)。

我建议查看EOS Portable Archive实现

在许可许可下可用。这有望实现真正可移植的序列化归档格式(有一些记录的限制)。

我希望您不需要转换,但如果需要,您可以随时将旧档案转换为文本格式档案。这应该至少为您提供适用于您的程序的所有版本的“中间地带”表示。 Compression can help如果文件档案与文本档案无关,那么{/ 3}。