use*_*121 8 serialization boost
我试图序列化一个矢量和一个地图容器,并通过cout输出它们的值.但是,我很难理解boost的输出含义.我的代码看起来像这样:
#include <iostream>
#include <boost/serialization/vector.hpp>
#include <boost/serialization/map.hpp>
#include <boost/assign.hpp>
#include <boost/archive/text_oarchive.hpp>
#include <boost/archive/text_iarchive.hpp>
#include <sstream>
#include <fstream>
using namespace std;
int main()
{
vector<int> v = boost::assign::list_of(1)(3)(5);
map<int, string> m = boost::assign::map_list_of(1,"one")(2,"two");
std::stringstream ss;
boost::archive::text_oarchive oa(ss);
oa<<v<<m;
vector<int> v_;
map<int,string> m_;
boost::archive::text_iarchive ia(ss);
ia>>v_>>m_;
boost::archive::text_oarchive ib(cout);
ib<<v_<<m_;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出如下所示:
22 serialization::archive 9 3 0 1 3 5 0 0 2 0 0 0 1 3 one 2 3 two
Run Code Online (Sandbox Code Playgroud)
在我创造的值1 3 5之前,数字9 3 0的含义是什么?0 0 2 0 0 0怎么样?'1'和'one'之间的'3'是否意味着有3个字符?
我不确定地图中的一些零(可能是一些版本号或跟踪级别),但其余的:
22 (length of the signature)
serialization::archive (signature)
9 (archive version, 10 on boost 1.53)
3 (vector size)
0 (item version)
1 3 5 (vector items)
0 (map class tracking level ?)
0 (map class version ?)
2 (map size)
0 (item class tracking _level ?)
0 (item class version ?)
0 (item version)
1 (key) 3 (value length) one (value)
2 (key) 3 (value length) two (value)
Run Code Online (Sandbox Code Playgroud)
请注意,文本输出的内容和格式是Boost的内部业务,并且可能会随着未来的Boost修订而更改,因此您的应用程序不应该依赖于内部存档内容.
如果将这些行放在代码末尾
boost::archive::xml_oarchive ib(cout);
ib<< boost::serialization::make_nvp("v", v_) << boost::serialization::make_nvp("m", m_); // ib<<v_<<m_;
return 0;
Run Code Online (Sandbox Code Playgroud)
您将获得此输出,它自我描述:
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE boost_serialization>
<boost_serialization signature="serialization::archive" version="10">
<v>
<count>3</count>
<item_version>0</item_version>
<item>1</item>
<item>3</item>
<item>5</item>
</v>
<m class_id="1" tracking_level="0" version="0">
<count>2</count>
<item_version>0</item_version>
<item class_id="2" tracking_level="0" version="0">
<first>1</first>
<second>one</second>
</item>
<item>
<first>2</first>
<second>two</second>
</item>
</m>
</boost_serialization>
Run Code Online (Sandbox Code Playgroud)
因此@zacinter是正确的,并且在0后面的三个2是:1)item_version(of std::pair的值类型map)2)tracking_levelof std::pair和3)versionof std::pair。
| 归档时间: |
|
| 查看次数: |
3637 次 |
| 最近记录: |