- 浏览: 270400 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (263)
- mysql (5)
- boost (6)
- 工具 (10)
- IT生活 (7)
- 多线程 (3)
- Ruby (15)
- php (2)
- MongoDB (39)
- 移动互联网 (2)
- 测试 (8)
- c++ (28)
- 书 (1)
- 网站 (3)
- 网络编程 (14)
- 开源软件 (1)
- 分布式计算 (1)
- 得得得 (1)
- php,wordpress (1)
- error (5)
- 编译 (2)
- 学习 (1)
- 杀毒软件 (1)
- dd (0)
- linux (21)
- 数据库 (1)
- STL (1)
- c++/c (5)
- 软件设计 (1)
- 操作系统 (4)
- 库 (2)
- win32 (1)
- s (0)
- openssl (1)
- perl (2)
- debug (1)
- windows (4)
- python (12)
- windows 防火墙 (1)
- vs (1)
- vim (2)
- vc (1)
- 浏览器插件的危害 (1)
- curl (0)
- 判断手机号码合法性的库 (0)
- 地址备注 (0)
- 安装 File::Slurp (1)
- cenos (2)
- shell (1)
- linunx (1)
- internet (1)
- software (1)
- widows (1)
- linux io (1)
- nginx (2)
- 算法 (2)
- google (1)
- protobuf (2)
- tengine (1)
- tools (1)
- lua (2)
- liunx (1)
- vcard (1)
- lua-iconv (1)
- 网络 (2)
- teat (0)
- ldconfig linux (0)
- awk (0)
- grep (0)
- windws (2)
- linux 命令 (1)
- tcp dump (1)
- vmware (1)
- question2answer (2)
- mongdb (1)
- 正则 (1)
- OCR (2)
- Windows Server (1)
最新评论
转: http://hi.baidu.com/ewook/blog/item/add93b6da0d5e2e1431694e5.html
序列化是将对象状态信息转换为可存储或传输的过程,序列化时,对象会将当前状态写入到临时或持久性的存储区。以后,可以通过从存储区中读取或反序列化对象的状态,重新创建该对象。
对象序列化反序列化通常用于:
1. 将对象存储于硬盘上
2. 在网络上传送对象的字节序列
更多介绍
常见的C++序列化方案
==Boost.Serialization==
介绍:Boost.Serialization可以创建或重建程序中的等效结构,并保存为二进制数据、文本数据、XML或者有用户自定义的其他文件。该库具有以下吸引人的特性:
1. 代码可移植(实现仅依赖于ANSI C++)
2. 深度指针保存与恢复
3. 可以序列化STL容器和其他常用模版库
4. 数据可移植
5. 非入侵性
使用:教程http://www.boost.org/doc/libs/1_45_0/libs/serialization/doc/tutorial.html
下载Boost库,并根据需要编译(Boost库涉及较广)。
编写应用。
●依需求编写入侵式或非入侵式序列化方法
●支持STL容器类、指针、父子类的序列化
为需要序列化的类添加序列化代码。
●初始化fstream
●需求初始化xml, text, binary存档
●写入对象,并关闭文件流
== MFC Serialization ==
简介:Windows平台下可使用MFC中的序列化方法。MFC 对 CObject 类中的序列化提供内置支持。因此,所有从 CObject 派生的类都可利用 CObject 的序列化协议。(MSDN中的介绍)
使用:
为VS项目添加MFC支持
●设置项目属性
●包含头文件C++:
1 #include <afxwin.h>
2 #include <afxtempl.h>
●编写继承CObject的类
●实现序列化方法C++:
1 void Serialize(CArchive& ar);
●添加序列化宏C++:
1 //添加在声明类中
2 DECLARE_SERIAL(basic_pojo_mfc)
3 //…
4 //添加在实现文件中
5 IMPLEMENT_SERIAL(MyObject, CObject, 1)
●编写序列化与反序列化的对象
●创建CFile,CArchive对象
●写入对象,关闭资源
==Google Protocol Buffers==
简介:Google Protocol Buffers (GPB)是Google内部是用的数据编码方式,旨在用来代替XML进行数据交换。可用于数据序列化与反序列化。主要特性有:
1. 高效
2. 语言中立(Cpp, Java, Python)
3. 可扩展
官方文档
使用:
●下载GPB,并编译出需要使用的库。
●编写.proto文件,并编译出.cc与.h文件。
●依规则编写.proto
●编译
●Shell/CMD:
1 protoc -I=$SRC_DIR –cpp_out=$DST_DIR $SRC_DIR/addressbook.proto
●编写序列化与反序列化代码。
比较
==测试用例介绍==
比较维度:
●序列化与反序列化消耗的时间
●产生数据文件大小
测试数据类型:
测试代码
结果
序列化与反序列化消耗的时间:
产生数据文件大小:
数据:
结论
Google Protocol Buffers效率较高,但是数据对象必须预先定义,并使用protoc编译,适合要求效率,允许自定义类型的内部场合使用。Boost.Serialization 使用灵活简单,而且支持标准C++容器。相比而言,MFC的效率较低,但是结合MSVS平台使用最为方便。希望有时间补充更多的序列化方案及测试指标。
序列化是将对象状态信息转换为可存储或传输的过程,序列化时,对象会将当前状态写入到临时或持久性的存储区。以后,可以通过从存储区中读取或反序列化对象的状态,重新创建该对象。
对象序列化反序列化通常用于:
1. 将对象存储于硬盘上
2. 在网络上传送对象的字节序列
更多介绍
常见的C++序列化方案
==Boost.Serialization==
介绍:Boost.Serialization可以创建或重建程序中的等效结构,并保存为二进制数据、文本数据、XML或者有用户自定义的其他文件。该库具有以下吸引人的特性:
1. 代码可移植(实现仅依赖于ANSI C++)
2. 深度指针保存与恢复
3. 可以序列化STL容器和其他常用模版库
4. 数据可移植
5. 非入侵性
使用:教程http://www.boost.org/doc/libs/1_45_0/libs/serialization/doc/tutorial.html
下载Boost库,并根据需要编译(Boost库涉及较广)。
编写应用。
●依需求编写入侵式或非入侵式序列化方法
●支持STL容器类、指针、父子类的序列化
为需要序列化的类添加序列化代码。
●初始化fstream
●需求初始化xml, text, binary存档
●写入对象,并关闭文件流
== MFC Serialization ==
简介:Windows平台下可使用MFC中的序列化方法。MFC 对 CObject 类中的序列化提供内置支持。因此,所有从 CObject 派生的类都可利用 CObject 的序列化协议。(MSDN中的介绍)
使用:
为VS项目添加MFC支持
●设置项目属性
●包含头文件C++:
1 #include <afxwin.h>
2 #include <afxtempl.h>
●编写继承CObject的类
●实现序列化方法C++:
1 void Serialize(CArchive& ar);
●添加序列化宏C++:
1 //添加在声明类中
2 DECLARE_SERIAL(basic_pojo_mfc)
3 //…
4 //添加在实现文件中
5 IMPLEMENT_SERIAL(MyObject, CObject, 1)
●编写序列化与反序列化的对象
●创建CFile,CArchive对象
●写入对象,关闭资源
==Google Protocol Buffers==
简介:Google Protocol Buffers (GPB)是Google内部是用的数据编码方式,旨在用来代替XML进行数据交换。可用于数据序列化与反序列化。主要特性有:
1. 高效
2. 语言中立(Cpp, Java, Python)
3. 可扩展
官方文档
使用:
●下载GPB,并编译出需要使用的库。
●编写.proto文件,并编译出.cc与.h文件。
●依规则编写.proto
●编译
●Shell/CMD:
1 protoc -I=$SRC_DIR –cpp_out=$DST_DIR $SRC_DIR/addressbook.proto
●编写序列化与反序列化代码。
比较
==测试用例介绍==
比较维度:
●序列化与反序列化消耗的时间
●产生数据文件大小
测试数据类型:
C++:01 //基本数据类型 02 class basic_pojo { 03 public : 04 char char8; 05 unsigned char uchar8; 06 short short16; 07 unsigned short ushort16; 08 int int32; 09 unsigned int uint32; 10 long long32; 11 unsigned long ulong32; 12 float float32; 13 double double64; 14 bool bool8; 15 }; 16 17 //复合数据类型 18 class complex_pojo { 19 public : 20 string string_stl; 21 basic_pojo_boost basic_class; 22 };
测试代码
结果
序列化与反序列化消耗的时间:
产生数据文件大小:
数据:
Protocol Buffers | Boost.Serialization | MFC:Serialization | |
Serialization(ms) | 94 | 219 | 1218 |
Unserialization(ms) | 203 | 296 | 1282 |
Archive Size(KB) | 4590 | 4493 | 5372 |
结论
Google Protocol Buffers效率较高,但是数据对象必须预先定义,并使用protoc编译,适合要求效率,允许自定义类型的内部场合使用。Boost.Serialization 使用灵活简单,而且支持标准C++容器。相比而言,MFC的效率较低,但是结合MSVS平台使用最为方便。希望有时间补充更多的序列化方案及测试指标。
发表评论
-
c++ 读取unicode文档
2015-02-09 16:12 975int ReadOneNameFile(char *fil ... -
http://curl.haxx.se/
2013-06-13 17:41 0http://curl.haxx.se/ -
[转]线程本地存储(Thread Local Storage, TLS)分析与使用
2013-05-03 16:53 815线程本地存储(Thread Local Storage, TL ... -
C/C++获得windows版本
2012-12-01 11:05 1479MSDN上有详细介绍,做个标记: #include & ... -
[转]异常处理与MiniDump详解(4) MiniDump
2012-10-24 14:46 972异常处理与MiniDump详解(4) MiniDump wri ... -
禁用系统硬错误消息对话框
2012-08-31 19:14 729http://support.microsoft.com/kb ... -
Application Crash Dump Analysis (Windows 7)
2012-08-28 09:39 0Application Crash Dump Analysis ... -
如何成为一个windows程序debug高手
2012-08-18 14:40 0minidump: http://blog.csdn.ne ... -
Boost库编译后命名方式
2012-05-17 10:29 1375Boost官网的《Geting Started ... -
geoIP
2012-05-14 12:38 0http://www.oschina.net/code/sni ... -
vs2010 断点 无法命中
2012-05-07 16:13 1365这种情况不解决办法有 很多。你这个方法我没用过。最简单的方法就 ... -
$err,hr
2012-05-04 20:43 927在Visual C++ 中,可以在监视窗口添加 $err,hr ... -
WINDOWS下线程同步探讨
2012-04-11 15:04 954概述 线程同步可 ... -
undefined reference to 'pthread_create'问题解决
2012-03-30 11:43 0由于是Linux新手,所以现在才开始接触线程编程,照着GUN/ ... -
linux 下 遍历文件夹下的内容
2012-03-29 19:43 0// only works in cpp #ifdef __c ... -
浅谈ReadDirectoryChangesW函数的作用和问题所在
2012-03-23 10:32 4338转自:http://www.cnblogs.com ... -
用 _findfirst 和 _findnext 查找文件,遍历文件夹
2012-03-30 11:39 2031标签: _findfirst _findnext 杂谈 分类: ... -
我的广告
2012-03-19 10:57 0http://www.webweb.com/signup.as ... -
服务器多服务器设置
2012-03-12 18:01 761当服务器功能比较多时,可以抽象出一个代理,将不同的服务 ... -
记录个函数 strstr
2012-03-10 11:30 1047包含文件:string.h 函数名: strstr 函 ...
相关推荐
3. **Cap'n Proto**:Cap'n Proto由Kenton Varda设计,其目标是提供比protobuf更快、更小的序列化方案。Cap'n Proto使用原生二进制格式,无需解析,因此在速度上具有显著优势。此外,它的零拷贝特性减少了内存操作,...
例如,使用Java或C++等面向对象语言,创建类和对象,实现继承和多态性。作业可能会涉及到设计和实现具有特定功能的系统,比如模拟银行系统、图形用户界面或者游戏引擎等,这些项目有助于锻炼学生的实际编程能力和...
通过分析这些文件,我们可以看到C++如何进行文件操作,以及如何将游戏状态序列化和反序列化。 5. **版本控制** 文件名中的"V1.3"和"V1.1"表示版本号,这表明开发者对游戏进行了多次迭代和改进。通过对比不同版本的...
《从零开始学C++:早期对象》是学习C++编程语言的一本经典教材,它不仅为初学者提供了深入浅出的理论知识,还通过大量的实践案例帮助读者掌握C++的核心概念和技术。以下是对该书各章节关键知识点的详细解析: ### ...
"Google Protocol Buffers简析.pdf"可能是对Protocol Buffers的深入解析,涵盖了高级用法、性能优化、与其他序列化方案的对比等内容。"protocolbufcn.rar"可能包含了中文版的Protocol Buffers文档、示例代码或其他...
1. **C++编程**:C++是一种强大的面向对象的编程语言,它提供了丰富的库支持和高效的执行性能,适合处理复杂的计算任务,如图像处理和机器学习算法。 2. **OpenCV库**:OpenCV(开源计算机视觉库)是一个广泛使用的...
通过研究源码,开发者可以深入了解其内部实现,定制自己的序列化解决方案,或者为项目贡献代码。 总的来说,FlatBuffers是一种强大的序列化工具,它通过优化内存布局和访问方式,提供了高效的序列化和反序列化体验...
《编写高质量代码:改善c#程序的157个建议》一共三个部分,第一部分专注于c#语言本身,一共89条建议,涵盖了c#语言基本要素、集合、linq、泛型、委托、事件、资源管理、序列化、异常处理、异步、多线程、任务和并行...
这涉及到文件I/O操作,如fstream库的使用,以及数据序列化和反序列化的技巧。 3. 用户界面:设计用户友好的交互界面,可以是命令行界面(CLI)或者图形用户界面(GUI)。对于CLI,可以使用标准输入输出进行交互;...
当前,Unity的热更新方案大多依赖于第三方框架,包括但不限于IL2CPP的使用、脚本语言的更换、资源的序列化以及资源与代码的绑定策略等。IL2CPP(Intermediate Language To C++)是Unity用来转换中间语言IL代码到C++...
2. **简单**:Hessian协议简单易用,可以自动处理Java对象的序列化和反序列化,降低了开发难度。 3. **跨平台**:虽然主要针对Java,但Hessian也有其他语言的实现,如C++、Python等,实现了跨语言的通信。 4. **透明...
在这一讲中,可能会对比不同的面向对象语言,如Java、C++、Python等,探讨它们如何实现面向对象特性,并解释各种语言在面向对象设计中的优势和局限性。此外,还可能讨论一些设计模式,如工厂模式、单例模式等,这些...
- **从 XML 反序列化 C/C++ 数据**:介绍了如何从 XML 反序列化回 C/C++ 数据。 - **序列化和反序列化类实例**:详细说明了如何序列化和反序列化类实例。 通过本文档的学习,开发者可以全面掌握 gSOAP 的使用方法...
- **序列化和反序列化**:将C++对象转换为JSON格式存储,或者从JSON数据恢复C++对象。 - **数据交互**:与服务器进行JSON格式的数据交换,如API调用。 - **配置文件读写**:使用JSON格式作为配置文件,方便读写和...
Hadoop并没有使用Java的序列化机制,而是自己定义了大量的可序列化对象,这些对象都实现了Writable接口。实现Writable接口的类可以将对象数据编码成适合网络传输的格式,并能够从这种格式中解码。 Hadoop的...
Python的序列化机制称为pickle和unpickle,pickle模块可以将Python对象转化为字符串并保存到文件中,unpickle则负责反序列化,恢复原始对象。 Python的内存管理由私有的heap空间处理,解释器负责分配和回收内存。...
根据提供的文件信息,我们可以从《C++中的算法》这本书中提炼出多个重要的知识点。下面将对这些知识点进行详细的介绍和解释。 ### 一、算法基础知识 #### 1.1 算法概述 - **定义**:算法是解决特定问题的一系列...
4. **简单对象序列化**:ROXS提供了内置的序列化机制,能够将C++对象转换为网络传输的字节流,并在接收端还原。这种序列化机制既高效又易于使用,有助于简化数据交换的过程。 **二、ROXS与RMI和CORBA的对比** 1. *...