加入收藏 | 设为首页 | 会员中心 | 我要投稿 济南站长网 (https://www.0531zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 教程 > 正文

Linux下C++如何借助Boost库进行序列化

发布时间:2021-11-22 13:31:53 所属栏目:教程 来源:互联网
导读:由于项目需求需要传输结构化的数据,但是我们进行socket通信时,利用recv和send函数处理的都是序列化的 数据,如何利用socket进行结构化的数据传输呢?这里就用到了我们现在要总结一下的boost库,boost是一个 开源的准标准的模板库,里面就提供了我们这里需

由于项目需求需要传输结构化的数据,但是我们进行socket通信时,利用recv和send函数处理的都是序列化的
数据,如何利用socket进行结构化的数据传输呢?这里就用到了我们现在要总结一下的boost库,boost是一个
开源的准标准的模板库,里面就提供了我们这里需要的序列化和反序列化的工具。话不多说,现在开始!
要使用boost库,首先需要的就是安装:
我们可以在终端中直接安装:
sudo apt-get install libboost1.46
当然我们也可以直接用源码的方式安装,这样的好处就是可以获得最新的boost库,现在已经出到了boost_1.51_0
 
cd ~/下载
tar -zxvf boost_1.51_0.tar.gz
cd boost_1.51_0
解压之后进入boost_1.51_0,其实boost的库分为两个部分一个是无需编译的一部分需要手动进行编译的部分,
新的版本中我们只需要在文件夹下面直接运行:
./bootstrap.sh
就ok了,哦对了 这个安装需要Python的运行环境,因为需要在安装之前需要,安装python!
下面就是我验证过得例子:
#include <vector>
#include <iostream>
#include <fstream>
#include <boost/archive/xml_oarchive.hpp>
#include <boost/archive/xml_iarchive.hpp>
#include <boost/serialization/vector.hpp>
 
using namespace std;
 
class VECTOR
{
public:
                vector <int> v;
                friend class boost::serialization::access;
                template <class Archive>
                void serialize (Archive & ar, const unsigned int version)
                {
                        ar & BOOST_SERIALIZATION_NVP (v);
                }
 
};
 
int main ()
{
        VECTOR vi, vi3;
        vi.v.push_back (10);
        vi.v.push_back (11);
        vi.v.push_back (12);
 
        vi3.v.push_back (20);
 
        VECTOR vi2;
 
        ofstream ofs ("hehe");
        boost::archive::xml_oarchive oa (ofs);
        oa << BOOST_SERIALIZATION_NVP (vi);
        oa << BOOST_SERIALIZATION_NVP (vi3);
        ofs.close ();
 
        ifstream ifs ("hehe");
        boost::archive::xml_iarchive ia (ifs);
        ia >> BOOST_SERIALIZATION_NVP (vi2);
 
 
        for (vector<int>::size_type i=0 ; i != vi2.v.size(); i++)
                        cout << vi2.v[i] << endl;
        cout << "----------------n";
        ia >> BOOST_SERIALIZATION_NVP (vi2);
        for (vector<int>::size_type j=0 ; j != vi2.v.size() ; j++)
                        cout << vi2.v[j] << endl;
        ifs.close ();
 
}
 
在例子我们对于类VECTOR进行了序列化的操作,我们要对类中的私有成员进行序列化操作需要:引入友元函数
friend class boost::serialization::access;ar & BOOST_SERIALIZATION_NVP (v);关于符号&代表这个函数既可以进行序列化也可进行反序列化!
 
这里关于boost里面有很多的操作还是非常有助于我们编程的提高的,值得我们深入研究!!!
 
 

(编辑:济南站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读