linux下c++如何利用boost库进行序列化

本文介绍了如何在Linux系统中利用Boost库进行C++的序列化和反序列化,以实现结构化数据通过socket通信的传输。首先讲解了Boost库的安装方法,包括使用apt-get和源码安装,接着展示了一个简单的序列化示例,演示了如何为自定义类添加序列化支持,并通过友元函数实现数据的保存和读取。
摘要由CSDN通过智能技术生成

由于项目需求需要传输结构化的数据,但是我们进行socket通信时,利用recv和send函数处理的都是序列化的

数据,如何利用socket进行结构化的数据传输呢?这里就用到了我们现在要总结一下的boost库,boost是一个

开源的准标准的模板库,里面就提供了我们这里需要的序列化和反序列化的工具。话不多说,现在开始!

要使用boost库,首先需要的就是安装:

我们可以在终端中直接安装:

sudo apt-get install libboost1.46

当然我们也可以直接用源码的方式安装,这样的好处就是可以获得最新的boost库,现在已经出到了boost_1.51_0

可以从这个网址下载需要的版本:http://www.boost.org/

下载完成后之后

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 

#include 

#include 

#include 

#include 

#include 

 

using namespace std;

 

class VECTOR

{

public:

                vector v;

                friend class boost::serialization::access;

                template 

                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::size_type i=0 ; i != vi2.v.size(); i++)

                        cout << vi2.v[i] << endl;

        cout << "----------------\n";

        ia >> BOOST_SERIALIZATION_NVP (vi2);

        for (vector::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里面有很多的操作还是非常有助于我们编程的提高的,值得我们深入研究!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值