boost 序列化

原创 2013年12月06日 11:49:03
#include <iostream>
#include <string>
#include <vector>
#include <sstream>

#include <boost/archive/binary_iarchive.hpp>
#include <boost/archive/binary_oarchive.hpp>

#include <boost/serialization/vector.hpp>

class CTest
{
    public:
        bool             m_b;
        char             m_c;
        int              m_i;
        float            m_f;
        std::string      m_s;
        std::vector<int> m_v;
    public:
        friend class boost::serialization::access;

        CTest()
            : m_b(false)
            , m_c('x')
            , m_i(0)
            , m_f(0.0f)
        {
        }

        CTest(bool b, char c, int i, float f, std::string str)
            : m_b(b)
            , m_c(c)
            , m_i(i)
            , m_f(f)
            , m_s(str)
        {
        }

        template<class Archive>
        void serialize(Archive & ar, const unsigned int version)
        {
            ar & m_b;
            ar & m_c;
            ar & m_i;
            ar & m_f;
            ar & m_s;
            ar & m_v;
        }

        void output()
        {
            std::cout << "Output Begin" << std::endl;
            std::cout << "m_b:" << m_b << "\t"
                << "m_c:" << m_c << "\t"
                << "m_i:[Different]" << m_i << "\t"
                << "m_f:" << m_f << "\t" 
                << "m_s:" << m_s << std::endl;
            std::cout << "vec:";
            int isize = m_v.size();
            for (int i = 0; i < isize; ++i)
            {
                std::cout << m_v[i] << "|";
            }
            std::cout << std::endl;
            std::cout << "Output End" << std::endl;
        }
};

int main(int argc, char* argv[])
{
    int n1 = 1;
    int n2 = 2;
    std::stringstream binary_stream1;
    boost::archive::binary_oarchive oa(binary_stream1);
    oa << n1 << n2;
    boost::archive::binary_iarchive ia(binary_stream1);
    int nn1 = 0;
    int nn2 = 0;
    ia >> nn1 >> nn2;
    // 取出两个后第三个不能取了,不然会出错
    // int nn3 = 0;
    // ia >> nn3;

    std::stringstream binary_stream2;
    boost::archive::binary_oarchive oa_test(binary_stream2);
    CTest t1(true, 'a', 10, 1.1, "abc");
    for (int i = 0; i < 3; ++i)
    {
        oa_test << t1;
        t1.m_i += 1;
        t1.m_v.push_back(i);
    }

    boost::archive::binary_iarchive ia_test(binary_stream2);
    CTest tt1;
    for (int i = 0; i < 3; ++i)
    {
        ia_test >> tt1;
        tt1.output();
    }

    return 0;
}


版权声明:本文为博主原创文章,未经博主允许不得转载。

boost之路 十一 序列化

 Boost.Serialization 的主要概念是归档。 归档的文件是相当于序列化的 C++ 对象的一个字节流。 对象可以通过序列化添加到归档文件,相应地也可从归档文件中加载。 为了恢复和之...
  • cqltbe131421
  • cqltbe131421
  • 2016年08月29日 15:17
  • 688

【学习笔记】boost序列化问题

遇到的问题:在做一个跨平台项目中尝试使用boost序列化来生成我们自己的文件格式,用于跨平台数据共享。但遇到了问题,即在自身的NDK环境下序列化出的文件自身可以使用,而在其他人的windows环境下序...
  • fangchenown
  • fangchenown
  • 2015年12月22日 11:26
  • 523

使用boost 库 将结构struct 序列化

1、下载boost 库,编译出boost 库的库文件,存入到工程目录的同级目录2、同时将boost 的源码目录拷贝到工程目录的同级目录。3、在工程的属性的C++ --> 常规  选项中将附加目录加入。...
  • mrliko
  • mrliko
  • 2011年02月15日 15:31
  • 966

BOOST xml 序列化用法

简单的开始 Serialization的中文解释是“串行化” 、“序列化”或者“持久化” ,就是将内存中的对象保存到磁盘中,等到程序再次运行的时候再读取磁盘中的文件恢复原来的对象。下面来看一个简单的例...
  • educast
  • educast
  • 2013年09月17日 21:51
  • 3072

boost如何序列化 和反序列化 指针类(本身类也可以)

今天找了很长时间如何序列化自己类,但是找了很多帖子都没有序列化自己的例子。最后我感觉是没有重载复制函数的原因,当我增加复制函数后就可以序列化自己的类了。不多说了 直接上代码,希望能帮助其他朋友 cl...
  • u011569253
  • u011569253
  • 2017年01月10日 17:59
  • 631

使用boost库序列化传输对象

http://www.cnblogs.com/-Lei/archive/2012/09/24/2700619.html  使用boost库序列化传输对象,要用到boost中的Boos...
  • oMingZi12345678
  • oMingZi12345678
  • 2015年06月23日 23:37
  • 894

boost 序列化成 xml文件

#include "stdafx.h"#include #include #include #include #include class TestClass{public:    TestClass...
  • cay22
  • cay22
  • 2009年07月28日 11:03
  • 4648

boost库xml序列化

今天利用编版本的时间研究了一下boost的序列化,特别是xml序列化的东东,还是有很多收获,记下来怕以后忘记了,人老了,很多东东都记不得了......(一)研究boost库xml序列化要做准备的工作a...
  • delphihero
  • delphihero
  • 2006年09月23日 01:54
  • 4227

Boost - 序列化 (Serialization)

程序开发中,序列化是经常需要用到的。像一些相对高级语言,比如JAVA, C#都已经很好的支持了序列化,那么C++呢?当然一个比较好的选择就是用Boost,这个号称C++准标准库的东西。 什么时候...
  • educast
  • educast
  • 2013年09月17日 10:38
  • 2189

Boost - 序列化 (Serialization) (写得很好**)

程序开发中,序列化是经常需要用到的。像一些相对高级语言,比如JAVA, C#都已经很好的支持了序列化,那么C++呢?当然一个比较好的选择就是用Boost,这个号称C++准标准库的东西。 什么时候...
  • chenaqiao
  • chenaqiao
  • 2015年09月11日 13:32
  • 839
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:boost 序列化
举报原因:
原因补充:

(最多只允许输入30个字)