vector(反)序列化与Boost.serialization的向后兼容性
Backwards compatibility of vector (de)serialization with Boost.serialization
不好意思。在向邮件列表boost-users发布了一个星期没有任何回应之后,我倾向于在stackoverflow上发布这个问题。原帖,稍作编辑:
嗨列表,
我正在从Boost v1.35迁移到一个新版本。然而,我有一些我希望新版本可读的遗留序列化字符串。
经过一些测试,我发现显然较新的版本(在这个案例1.40(以及以后的版本)不能正确地反序列化来自1.35的std::vector实例生成的字符串。谁能给我指点一下可能是什么这里的问题吗?
非常感谢!
埃瓦尔德
= = = =
细节我使用的是文本存档,和gcc版本4.4.1 (Ubuntu 4.4.1-4ubuntu9)
测试向量是一个包含2个元素的结构体,即长整数1和2。
对应库版本的存档字符串:
1.35: archive: 22 serialization::archive 4 2 1 2
1.40: archive: 22 serialization::archive 5 2 0 1 2
:
// includes
#include <boost/serialization/vector.hpp>
#include <boost/archive/text_iarchive.hpp>
#include <boost/archive/text_oarchive.hpp>
std::vector<long> testvector;
std::string val = "22 serialization::archive 4 2 1 2"; // v1.35 archive
{
std::stringstream ss(std::stringstream::in | std::stringstream::out);
ss << val << std::endl;
boost::archive::text_iarchive ia(ss);
ia >> BOOST_SERIALIZATION_NVP(testvector);
}
使用lib v1.40执行时的结果:testvector包含两个元素,{2, 2}
——代替{1, 2}
注意:s11n和de-s11n使用相同的lib版本工作完美
至少在Boost 1.48中有一个文件boost/serialization/vector_135.hpp
有这样的注释:
vector_135.hpp:序列化STL矢量模板以与1.35版本兼容,该版本有一个错误
我认为你可以包括它而不是boost/serialization/vector.hpp
。当然,缺点是,在这种情况下,新序列化的向量也将采用这种有缺陷的格式。
对代码的简要研究表明,如果使用该文件,load()
将能够反序列化两种格式,但save()
将以新格式进行序列化。所以,唯一的缺点似乎是丑陋的include name。
- 我在使用 boost::serialization 时遇到了一个问题,我的代码在 Linux 中运行良好,但在 Wind
- 使用 Boost::Serialization 序列化具有 std::mt19937_64 成员的类
- 如何在Boost Serialization ::存档中抑制额外信息
- 为什么Boost Serialization使用的类版本限制为8位
- C++ Boost.Serialization - 用户定义成员的非侵入式序列化
- 是否有一种方法可以使用Boost Serialization序列化迭代器
- 如何在Boost Serialization中检索多个对象值
- flann/util/serialization.h class std::unordered_map<unsigned int, std::vector<unsigned int>
- Do grain和Boost Serialization使用零拷贝
- Microsoft Guid guid serialization使用Boost序列化
- boost::serialization-序列化从泛型属性/功能容器派生的类
- 将 Boost.Serialization 直接与虚拟钻石继承一起工作
- 如何在 c++ 中使用 boost:serialization 时解决"sizeof"错误?
- c++11 shared_ptr + Boost::Serialization
- MFC serialization
- MFC XML Serialization
- 使用boost.serialization和STL容器作为模板参数
- C++ shared_ptr serialization
- Qt Json serialization
- 调试Boost.Serialization地址跟踪