【原创】C++中对象的序列化
1、对象序列化
对象的序列化是指将对象的状态信息转换为可以存储或者传输的形式的过程。对象的反序列化是与序列化相反的过程。
在序列化期间,对象将其当前的状态写入到临时或者永久性的存储区,可以通过从存储区读取或者反序列化对象的状态,重新创建该对象。
通过序列化,可以将对象从一个应用域发送到另一个应用域中,或者通过网络连接将对象数据发送到另一台主机。
博文中将对象序列化到文件中。
2、C++下对象序列化的实现
1)将一个类的一个对象序列化到文件
这是最简单的情况,一个类中只定义一个数据成员。
//Srlz1.cpp: 将一个类的一个对象序列化到文件
#include <iostream>
#include <fcntl.h>
#include <vector>
#include <stdio.h>
using namespace std; //定义类CA
//数据成员:int x;
//成员函数:Serialize:进行序列化函数
// Deserialize反序列化函数
// Show:数据成员输出函数
class CA
{
private:
int x; //定义一个类的数据成员。 public:
CA() //默认构造函数
{
x = ;
}
CA(int y):x(y) //定义构造函数,用初始化列表初始化数据成员
{
}
virtual ~CA() //析构函数
{
}
public:
//序列化函数:Serialize
//成功,返回0,失败,返回0;
int Serialize(const char* pFilePath) const
{
int isSrlzed = -;
FILE* fp; //define a file pointer
//以读写方式打开文件,并判断是否打开;
if ((fp = fopen(pFilePath, "w+")) == NULL)
{
printf("file opened failure\n");
return -; //若打开失败,则返回-1;
}
//调用fwrite函数,将对象写入文件;
isSrlzed = fwrite(&x, sizeof(int), , fp); //判断写入是否成功;
if ((- == isSrlzed) || ( == isSrlzed))
{
printf("Serialize failure\n");
return -; //若写入失败,则返回-1;
}
if(fclose(fp) != ) //关闭文件
{
printf("Serialize file closed failure.\n");
return -;
}
printf("Serialize succeed.\n");
return ; //序列化成功,返回0;
} //反序列化函数:
//成功,返回0,失败,返回-1;
int Deserialize(const char* pFilePath)
{
int isDsrlzed = -;
FILE* fp;
//以读写方式打开文件,并判断是否打开;
if ((fp = fopen(pFilePath, "r+")) == NULL)
{
printf("file opened failure.\n");
return -;
}
//调用fread函数,读取文件中的对象 ;
isDsrlzed = fread(&x, sizeof(int), , fp);
//判断是否成功读入
if ((- == isDsrlzed)||( == isDsrlzed))
{
printf("Deserialize failure.\n");
return -; //若读取失败,则返回-1;
}
if(fclose(fp) != )
{
printf("Deserialize file closed failure.\n");
return -;
}
printf("Deserialize succeed.\n");
return ; //反序列化成功,则返回0;
} //成员对象输出显示函数
void Show()
{
cout<< "in Show():"<< x << endl;
}
};
以上代码定义了class CA,包括:
数据成员:x;
序列化函数:Serialize();
反序列化函数:Derialize();
数据成员输出函数:Show();
main函数:
int main(int argc, char const *argv[])
{
CA as(); //定义一个类对象,并初始化; //调用序列化函数,将对象as序列化到文件data.txt中;
as.Serialize("data.txt"); CA ad; //定义一个类对象,用来记录反序列化对象
//调用反序列化函数,将文件data.txt中的对象反序列化到ad对象;
ad.Deserialize("data.txt"); ad.Show(); //调用输出显示函数; return ; }
【原创】C++中对象的序列化的更多相关文章
- java中对象的序列化和反序列化
[对象的序列化和反序列化 ] 1.定义:序列化--将对象写到一个输出流中.反序列化则是从一个输入流中读取一个对象.类中的成员必须是可序列化的,而且要实现Serializable接口,这样的类的对象才能 ...
- 为什么需要用到序列化?为什么HttpSession中对象要序列化
简单说就是为了保存在内存中的各种对象的状态,并且可以把保存的对象状态再读出来.虽然你可以用你自己的各种各样的方法来保存Object States,但是Java给你提供一种应该比你自己好的保存对象状态的 ...
- asp.net中对象的序列化,方便网络传输
对象序列化 是将对象状态转换为可保持或传输的格式的过程.反序列化 是将流转换为对象序列化和反序列化相结合 可以使对象数据轻松的存储和传递 在 .NET 中,如果是对象可序列化,需要在 声明对象的开始部 ...
- 一文带你全面了解java对象的序列化和反序列化
摘要:这篇文章主要给大家介绍了关于java中对象的序列化与反序列化的相关内容,文中通过详细示例代码介绍,希望能对大家有所帮助. 本文分享自华为云社区<java中什么是序列化和反序列化?>, ...
- .net中对象序列化技术浅谈
.net中对象序列化技术浅谈 2009-03-11 阅读2756评论2 序列化是将对象状态转换为可保持或传输的格式的过程.与序列化相对的是反序列化,它将流转换为对象.这两个过程结合起来,可以轻松地存储 ...
- Android中SharedPreferences和序列化结合保存对象数据
前言: 最近在做用户注册的时候,遇到了需要填写很多表单数据,不可能在一页把所有的数据都展示完全,因此采用了分页的方式,由于在用户填写数据数据之后我们需要对用户填写的数据进行暂时的记录的,当用户会到此页 ...
- 线程安全使用(四) [.NET] 简单接入微信公众号开发:实现自动回复 [C#]C#中字符串的操作 自行实现比dotcore/dotnet更方便更高性能的对象二进制序列化 自已动手做高性能消息队列 自行实现高性能MVC WebAPI 面试题随笔 字符串反转
线程安全使用(四) 这是时隔多年第四篇,主要是因为身在东软受内网限制,好多文章就只好发到东软内部网站,懒的发到外面,现在一点点把在东软写的文章给转移出来. 这里主要讲解下CancellationT ...
- 第12讲-Java中的IO操作及对象的序列化与反序列化
1.知识点 1.1.课程回顾 1.2.本章重点 1.2.1 io操作 1.2.2 对象的序列化与反序列化 2.具体内容 2.1.Java IO 2.1.1.什么是IO IO其实就是输入.输出 I ...
- .net中对象序列化技术
序列化是将对象状态转换为可保持或传输的格式的过程.与序列化相对的是反序列化,它将流转换为对象.这两个过程结合起来,可以轻松地存储和传输数据.例如,可以序列化一个对象,然后使用 HTTP 通过 Inte ...
随机推荐
- Jade学习笔记
初学nodejs,折腾过用handlebars做模板,后来隔了一段重新学习,用了jade,真心简洁……记录一些学习笔记,以备复习. jade是基于缩进的,所以tab与space不能混用: 属性的设置: ...
- Java系列--第三篇 基于Maven的Android开发CAIO
学习要打好基础,这里用一个项目来学习一下Android的组件,参考网址为这个但不限于这个.有些东西的学习,理解三遍理论还不如一遍操作,所谓理论来自实践,实践是检验真理的唯一标准.所以,虽然看懂了那篇文 ...
- 关于ROW_NUMBER函数的使用(The use of ROW_NUMBER function )
1.用于删除重复记录(The use of to delete the common record) 例子:(Example) #1初始化数据(Initialize the data) CREATE ...
- 层次查询start with ... connect by
如:select distinct dep_id from t_sys_dep_dimensions start with dep_id = (select dept_id from t_sys_pe ...
- Python核心编程(第八章)--条件和循环
如果一个复合语句(if子句,while或for循环)的代码仅仅包含一行代码,可以和前面的语句写在同一行上: elif语句(else-if) 条件表达式(三元操作符) X if C else Y 计 ...
- Spark学习笔记--stage和task的划分
https://github.com/JerryLead/SparkInternals/blob/master/markdown/3-JobPhysicalPlan.md stage 和 task 的 ...
- LeetCode_Minimum Window Substring
Given a string S and a string T, find the minimum window in S which will contain all the characters ...
- Cmake ,Out of Source Build
Out of Source build呢,就是让Cmake产生的临时垃圾文件,不关乎于项目实际本身的文件放到一个目录里,一般我们把这个目录放在项目根目录(也可以认为是根CmakeLists.txt)下 ...
- Teach Yourself Scheme in Fixnum Days 13 Jump跳转
Jumps One of the signal features of Scheme is its support for jumps or nonlocal control. Specificall ...
- http://wiki.apache.org/tomcat/HowTo
http://wiki.apache.org/tomcat/HowTo Contents Meta How do I add a question to this page? How do I con ...