1. // testSerialization.cpp : Defines the entry point for the console application.
  2. //
  3. #include "stdafx.h"
  4. #include <boost/archive/text_oarchive.hpp>
  5. #include <boost/archive/text_iarchive.hpp>
  6. #include <boost/serialization/vector.hpp>
  7. #include <string>
  8. #include <vector>
  9. #include <iostream>
  10. #include <sstream>
  11. #include <fstream>
  12. /*
  13. 标题:boost的序列化反序列化功能测试
  14. 环境:VS2010sp1、boost 1.55
  15. 参考资料:
  16. [1]《Boost中支持序列化反序列化的库--boost.serialization 》
  17. http://blog.csdn.net/oracleot/article/details/4280084
  18. [2]《What does BOOST_SERIALIZATION_NVP do when serializing object?》
  19. http://stackoverflow.com/questions/8532331/what-does-boost-serialization-nvp-do-when-serializing-object
  20. */
  21. struct MyRecord
  22. {
  23. std::string a;
  24. std::string b;
  25. //为使当前的结构能支持序列化,得加入下面的代码段
  26. private:
  27. friend class boost::serialization::access;
  28. template<class Archive>
  29. void serialize(Archive & ar, const unsigned int version)
  30. {
  31. ar & a;
  32. ar & b;
  33. }
  34. };
  35. struct MyData{
  36. int id;
  37. std::string strName;
  38. std::string strValue;
  39. MyData() {}
  40. MyData(int id, std::string strName, std::string strValue)
  41. {
  42. this->id = id;
  43. this->strName = strName;
  44. this->strValue = strValue;
  45. }
  46. std::vector<MyRecord> listMR;
  47. private:
  48. friend boost::serialization::access;          //声明友元,授予访问权限
  49. template<typename Archive>
  50. void serialize(Archive &ar,const unsigned int version)     //序列化函数
  51. {
  52. ar & id;
  53. ar & strName & strValue;
  54. ar & listMR;
  55. }
  56. };
  57. void printTest(MyData &mt)
  58. {
  59. std::cout<<"a="<<mt.id<<" uid="<<mt.strName.c_str()<<" usr="<<mt.strValue.c_str()<<std::endl;
  60. std::vector<MyRecord>::iterator iter = mt.listMR.begin();
  61. while(iter!=mt.listMR.end())
  62. {
  63. std::cout<<"=> "<<iter->a.c_str()<<"  "<<iter->b.c_str()<<std::endl;
  64. iter++;
  65. }
  66. }
  67. int _tmain(int argc, _TCHAR* argv[])
  68. {
  69. std::stringstream ss;
  70. //序列化
  71. MyData p1(11,"anderson","neo");      //被序列化的对象
  72. //为被序列化对象添加两条记录
  73. MyRecord mr,mr2;
  74. mr.a="apple",mr.b="第一条记录";
  75. mr2.a = "this is b",mr2.b = "第二条记录";
  76. p1.listMR.push_back(mr);
  77. p1.listMR.push_back(mr2);
  78. boost::archive::text_oarchive(ss) << p1; //序列化
  79. //序列化为xml形式要求中文为utf-8编码,否则打开文件是乱码
  80. //std::stringstream ss;
  81. //std::ofstream ofs("d:\\a.xml");
  82. //boost::archive::xml_oarchive oa(ofs);
  83. //oa << BOOST_SERIALIZATION_NVP(p1);
  84. //反序列化
  85. MyData p2;                               //被反序列化的对象
  86. boost::archive::text_iarchive(ss) >> p2; //反序列化
  87. printTest(p2);
  88. std::cout << "序列化后的=>" <<    ss.str() << std::endl;;
  89. return 0;
  90. }

http://blog.csdn.net/lee353086/article/details/38421095

测试了下boost的序列化反序列化功能的更多相关文章

  1. 序列化 反序列化 MessagePack for C#

    阅读目录 快速序列化组件MessagePack介绍 简介 使用 快速开始 分析器 内置的支持类型 对象序列化 DataContract兼容性 序列化不可变对象(序列化构造器) 序列化回调 Union ...

  2. 一个更好的C++序列化/反序列化库Kapok

    KapokFAQ1.Kapok的特点简单,易用,header-only,只需要引用Kapok.hpp即可:高效,初步测试性和messagepack相当.它是纯c++11实现,因此需要支持C++11的编 ...

  3. 5) ModelSerializer(重点) 基表 测试脚本 多表关系建外键 正反查 级联 插拔式连表 序列化反序列化整合 增删查 封装response

    一.前戏要做好 配置:settings.py #注册drf INSTALLED_APPS = [ # ... 'api.apps.ApiConfig', 'rest_framework', ] ​ # ...

  4. day71:drf:API接口&Restful API规范&Django Rest Framework&drf中的序列化和反序列化功能

    目录 1.web应用模式 2.API接口 3.Restful API规范 4.序列化 5.Django Rest Framework 1.drf的简单介绍 2.drf的特点 3.如何安装drf 4.d ...

  5. 给Ajax一个漂亮的嫁衣——Ajax系列之五(下)之序列化和反序列化

    给Ajax一个漂亮的嫁衣——Ajax系列之五(下)之序列化和反序列化 标签: ajaxdictionaryjsonobject服务器function 2012-07-25 18:41 2242人阅读  ...

  6. springboot学习(三)——http序列化/反序列化之HttpMessageConverter

    以下内容,如有问题,烦请指出,谢谢! 上一篇说掉了点内容,这里补上,那就是springmvc的http的序列化/反序列化,这里简单说下如何在springboot中使用这个功能. 使用过原生netty ...

  7. C语言JSON序列化/反序列化

    最近想找一个C语言处理嵌套结构体和结构体数组的json库,理想的是能够很容易处理复杂结构体嵌套,并且使用简单的,但是没找到比较合适的,于是打算自己封装一个: 两个问题: C语言结构体本身没有元数据,这 ...

  8. python_way ,day5 模块,模块3 ,双层装饰器,字符串格式化,生成器,递归,模块倒入,第三方模块倒入,序列化反序列化,日志处理

    python_way.day5 1.模块3 time,datetime, json,pickle 2.双层装饰器 3.字符串格式化 4.生成器 5.递归 6.模块倒入 7.第三方模块倒入 8.序列化反 ...

  9. C#之你懂得的序列化/反序列化

    前言:写此文章一方面是为了巩固对序列化的认识,另一方面是因为本人最近在面试,面试中被问到“为什么要序列化”.虽然一直在使用,自己也反复的提到序列化,可至于说为什么要序列化,还真的没想过,所以本文就这样 ...

随机推荐

  1. swift学习第十六天:懒加载和tableView

    懒加载 懒加载的介绍 swift中也有懒加载的方式 (苹果的设计思想:希望所有的对象在使用时才真正加载到内存中) 和OC不同的是swift有专门的关键字来实现懒加载 lazy关键字可以用于定义某一个属 ...

  2. 细说CSS伪类和伪元素

    原文 简书原文:https://www.jianshu.com/p/eae56b7fe7fe 大纲 1.伪元素 2.伪类元素 3.伪元素和伪类元素的区别 4.伪类和伪元素的使用 1.伪元素 伪元素在D ...

  3. (十三)RabbitMQ消息队列-VirtualHost与权限管理

    原文:(十三)RabbitMQ消息队列-VirtualHost与权限管理 VirtualHost 像mysql有数据库的概念并且可以指定用户对库和表等操作的权限.那RabbitMQ呢?RabbitMQ ...

  4. apche commons项目简介 分类: B1_JAVA 2014-06-26 11:27 487人阅读 评论(0) 收藏

    1.apche commons项目封装了日常开发中经常使用的功能,如io, String等. http://commons.apache.org/ Apache Commons项目的由三部分组成: T ...

  5. 五一巨献,问答有礼,105QB送给IT互联网界的劳动人民

    活动主题:五一巨献,问答有礼,105QB送给IT互联网界的劳动人民活动时间:4月30日晚上10点~5月2日晚上10点活动期数:第1期,20150401 奖品:105QB获奖人数:20人1~5:每人10 ...

  6. 【9201】&&【a201】明明的随机数

    Time Limit: 10 second Memory Limit: 2 MB 问题描述 明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了N个1到1000之间的随机整 ...

  7. kvm 虚拟化概述及 virt-manager 安装虚拟机

    一.KVM定义 基于内核的虚拟机(英语:Kernel-based Virtual Machine,简称KVM),是一种用于Linux内核中的虚拟化基础设施. KVM眼下支持Intel VT及AMD-V ...

  8. [Win 8/WP 8]简单实现弹出页更换头像的功能

    在Win 8应用里,对弹出页(Popup)的灵活操作必不可少,下面我们就来简单实现一个. 一.先让Popup弹出到指定位置 先来看看效果图,如图[1]: 下面是前端代码,代码段[1]: <Gri ...

  9. 【42.86%】【codeforces 742D】Arpa's weak amphitheater and Mehrdad's valuable Hoses

    time limit per test1 second memory limit per test256 megabytes inputstandard input outputstandard ou ...

  10. ajax跳转到新的jsp页面(局部刷新)

    ajax可以实现局部刷新页面,即在不刷新整个页面的情况下更新页面的局部信息. 项目中遇到一个问题:在用户列表也,当点击某个按钮时需要去查询用户的信息,查询成功跳转到用户详情界面:查询失败,则在原页面弹 ...