我正在尝试使用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等),那就太棒了。
答案 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序列化。