Boost序列化在32位和64位机器之间不起作用。还有其他任何序列化/压缩库吗?

时间:2015-06-03 22:06:52

标签: c++ serialization boost 32bit-64bit cereal

我正在尝试使用boost库在64位机器上进行序列化并在32位机器上进行反序列化。但是,它似乎不起作用。 (我使用1.57.0)。

如果我运行以下代码

boost::asio::streambuf buf;
std::ostream os(&buf);
boost::archive::binary_oarchive oa(os);
printf("Buffer size %d\n",(int)buf.size());

32位机器的输出 37 ,64位机器的输出 41

我可以使用其他好的序列化库吗? 谷物怎么样?

如果库也可以进行压缩(zlib / gzip等),那就太棒了。

3 个答案:

答案 0 :(得分:4)

确实有效。它只是不创建兼容的档案。如果您需要,您应该查看EOS所做的存档实现:

您可以直接替换Boost的binary_ [io]存档。无需改变任何其他内容。

PS。当然,也可以用与架构无关的方式拼出你的类型。所以uint32_t,而不是``size_t`

答案 1 :(得分:1)

如果更改机器的体系结构,boost :: serialization创建的二进制存档将不起作用。在这种情况下,文本存档是一个很好的选择。 Boost :: archive :: text_oarchive和boost :: archive :: text_iarchive可以使用完全相同的方式,但在架构和平台之间是安全的。数据以ascii格式而不是二进制格式写入,因此需要在那里进行权衡,以达到您的目的。

答案 2 :(得分:-1)

我建议使用谷物'为此目的,它可以提供JSON / XML序列化。