由于项目需求需要传输结构化的数据,但是我们进行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里面有很多的操作还是非常有助于我们编程的提高的,值得我们深入研究!
相关推荐
在Boost.Serialization中,你可以对自定义的类以及标准模板库(STL)中的容器进行序列化。例如,你可以序列化一个包含`std::vector`,`std::map`,或者其他STL容器的类实例。 Boost.Serialization提供了两种主要的...
**C++ Boost库**是C++编程语言的一个开源库集合,它为标准库提供了一系列的扩展,涵盖了诸如并发、算法、容器、智能指针、序列化、正则表达式、图形算法等多种领域。Boost库的设计目标是提升C++的效率、可移植性和可...
Boost库使用最先进的C++特性进行实现,并且具有良好的跨平台兼容性,能够在多种操作系统上运行,包括Windows、Linux等。 1.2 **开发过程** Boost库的开发过程非常开放和透明,鼓励社区参与贡献。这使得Boost库不仅...
6. **序列化**:Boost.Serialization库允许对象的状态在不同时间或不同机器之间保存和恢复,这对于持久化存储和网络传输十分方便。 接下来,我们将探讨如何在ARM架构下编译Boost库: 1. **获取源码**:首先,你...
在本文中,我们将深入探讨如何使用C++编程语言和BOOST库在Linux环境下实现卷积神经网络(CNN)。C++是一种高效、通用的编程语言,常用于高性能计算和系统级编程,而BOOST则是一个广泛使用的C++库,提供了许多实用...
Boost社区对新库的贡献者开放,任何C++开发者都可以提交自己的库或对现有库进行改进。新库的评审是一个由社区成员共同参与的评审过程,该过程需要对库进行评分,并基于这些评分决定是否接纳新库。 了解Boost库对于...
8. **序列化**:Boost.Serialization库允许将对象的状态保存到文件或流中,便于持久化存储和恢复。 9. **测试框架**:Boost.Test提供了一个全面的单元测试框架,帮助开发者编写和组织测试用例,确保代码质量。 10....
Boost库强调泛型编程,如`Boost.Lambda`库允许在运行时构造函数体,`Boost.Bind`提供绑定函数和成员函数的能力,而`Boost.MPL`(Metaprogramming Library)则允许在编译时进行计算,极大地扩展了C++的编程范式。...
"bin"目录下可能包含的是预编译的可执行文件或工具,这些工具可能用于与Avro库相关的操作,例如序列化/反序列化数据,或者进行数据验证等。 "include"目录下的头文件(.h)是Avro C++库的关键部分,它们定义了API...
在C++中,可以使用Apache Arrow和Parquet等库进行列式存储和快速查询,或者使用Google's Flatbuffers进行序列化。 - **挑战与解决方案**:面对大数据,需要优化内存管理、数据压缩和并行计算能力。例如,使用内存...
5. **Boost.Serialization**:提供了一种序列化和反序列化对象的方法,用于持久化存储或网络传输。 6. **Boost.Python**:使得C++可以无缝集成Python,允许在C++程序中调用Python代码或反之亦然。 7. **Boost....
4. **数据序列化**:借助Boost.Serialization实现复杂数据结构的持久化。 5. **图形界面开发**:结合Boost.Graph和Boost.Geometry库进行图形数据处理。 6. **数学计算**:利用Boost.Math库进行高级数学运算。 #### ...
10. **Serialization**:Boost.Serialization库提供了序列化和反序列化机制,能够将对象状态保存到文件或数据库,便于数据持久化和传输。 这个压缩包"boost_1_74_0.zip"中的"boost"目录包含了完整的Boost库源代码,...
这个“boost-demo”项目显然是一个旨在教授如何在Ubuntu Linux环境下利用Boost库的命令行应用程序。在本文中,我们将深入探讨Boost库的关键组件、Ubuntu Linux环境下的开发准备以及如何利用Boost库编写C++程序。 ...
本文将对一些著名的C++程序库进行简要介绍和比较。 首先,C++标准库是所有C++开发的基础,它包含了如输入/输出流、容器、算法、字符串处理等基本设施。Dinkumware C++ Library是由P.J. Plauger博士编写的,被广泛...
8. **序列化库(Boost.Serialization)**:能够将对象的状态序列化到文件或流中,然后在需要时反序列化恢复,这对于持久化存储和网络通信非常有用。 9. **日期时间库(Boost.DateTime)**:提供对日期、时间和持续时间...
Boost库是C++编程语言中的一个开源库集合,它提供了大量的高效、跨平台的库,以支持各种编程任务,如并发、数学运算、文件系统操作、正则表达式、序列化、日期时间处理等。在CentOS7系统上,Boost库的编译和安装对于...
在这个版本中,MySQL与boost库进行了集成,boost库是一个开源的C++库集合,提供了大量的工具和组件,能够帮助开发者更高效地编写高质量的代码。 MySQL 5.7.24中的关键知识点包括: 1. **InnoDB存储引擎优化**:在...
Boost包含的库众多,如`Boost.Filesystem`用于文件系统操作,`Boost.Date_Time`处理日期和时间,`Boost.Thread`支持多线程编程,`Boost.Signals2`实现信号与槽机制,`Boost.Asio`提供异步I/O,`Boost.Serialization`...
Boost库是C++编程语言的一个开源库集合,它提供了大量的工具和库,旨在提升C++的效率、灵活性和可移植性。...这些库涵盖了从并发处理、网络编程、文件操作到序列化、元编程等众多领域,极大地丰富了C++程序员的工具箱。