由於項目需求需要傳輸結構化的數據,但是我們進行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 <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裡面有很多的操作還是非常有助於我們編程的提高的,值得我們深入研究!!!