boost之序列化学习(一)

本文介绍了Boost库的序列化机制,包括文本和二进制形式。重点讲解了纯文本和XML序列化,以及如何使用text_oarchive和text_iarchive。还探讨了数组、STL容器、自定义类型及指针的序列化,并提到了serialize函数的拆分以利于扩展。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近在研究boost这个库,这个库很强大,鉴于工作的需要,我花了点时间学习了下boost库里的序列化机制,个人感觉很强大,boost库对序列化这块支持的范围很广,其中对于xml这方面的序列化机制感觉支持的很不错,下面就从最基础的开始吧,代码如下:

#include <boost/archive/text_oarchive.hpp>
#include <boost/archive/text_iarchive.hpp>
#include <boost/archive/xml_oarchive.hpp>
#include <boost/archive/xml_iarchive.hpp>
#include <boost/serialization/vector.hpp>
#include <boost/serialization/list.hpp>
#include <iostream>
#include <fstream>

void save()
{
    std::ofstream file("archive.txt");
    boost::archive::text_oarchive oa(file);
    std::string s = "Hello world";
    //oa << s;
    oa & s;
}

void load()
{
    std::ifstream file("archive.txt");
    boost::archive::text_iarchive ia(file);
    std::string s;
    //ia >> s;
    ia & s;
    std::cout << s << std::endl;
}

在boost中比较常用的序列化机制主要分为文本时和二进制形式,而文本时的序列化机制又分为了纯文本式和xml式,而上面的例子就是一个纯文本式的序列化机制,里面用到了boost库的text_oarchive和text_iarchive,并且在用boost做序列化时我们一般都会设置一些序列化载体,纯文本式的序列化机制其载体就是单个的纯文本文件,而xml式的载体则是xml文件,至于二进制序列化其载体就不确定了,一般都是内存buffer结构,有时也会写文件,在上述代码中,我们首先定义好了载体,然后与相应的序列化对象进行关联,并通过相应的运算符操作来实现相关的序列化操作,接下来,我们来看看xml式的序列化机制,代码如下:

void save_XML()
{
    std::ofstream file("test.xml");
    boost::archive::xml_oarchive oa(file);
    std::string s = "Hello world";
    oa & BOOST_SERIALIZATION_NVP(s);
}

void load_XML()
{
    std::ifstream file("test.xml");
    boost::archive::xml_iarchive ia(file);
    std::string s;
    ia & BOOST_SERIALIZATION_NVP(s);
    std::cout << s <<std::endl;
}

在以xml为载体的序列化中,会使用到xml_oarchive和xml_iarchive,并且还会使用到BOOST_SERIALIZATION_NVP这个宏,在这个地方我们先不对这些对象以及宏进行深入讨论,在下篇博文中,我们会深入分析boost库的Serialization这个类,接下来,我们稍微来看看基于xml式序列化机制的一些测试用例吧,代码如下:

1. 针对数组和STL

void save_Array()
{
    std::ofstream file("test1.xml");
    boost::archive::xml_oarchive oa(file);
    int array1[] = {12,23,34,4,343};
    oa & BOOST_SERIALIZATION_NVP(array1);
}

void load_Array()
{
    std::ifstream file("test1.xml");
    boost::archive::xml_iarchive ia(file);
    int restored[5];
    ia & BOOST_SERIALIZATION_NVP(restored);
    std::ostream_iter
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值