4

我正在尝试使用 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());

32bit 机器的输出是37,64bit 机器的输出是41

还有其他我可以使用的好的序列化库吗?麦片呢?

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

4

3 回答 3

5

它确实有效。它只是不创建兼容的档案。如果您愿意,您应该查看 EOS 制作的存档实现:

您可以直接用它替换 Boost 的 binary_[io]archive。无需更改任何其他内容。


PS。当然,当然,也可以用一种独立于架构的方式来说明你的类型。所以uint32_t,不是“size_t”

于 2015-06-03T22:08:46.760 回答
1

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

于 2015-06-03T22:37:48.747 回答
-1

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

于 2016-11-01T13:05:17.610 回答