【原创】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 ...
随机推荐
- sql server 查找指定字符串的位置
create function fn_find(@find varchar(8000), @str varchar(8000), @n smallint) returns int as begin i ...
- jquery mobile touch 实例
<!DOCTYPE html> <html lang="en" xmlns="http://www.w3.org/1999/xhtml"> ...
- Hadoop学习历程(二、配置)
以下是进行单节点Hadoop配置的内容,多节点也类似 1. 进行Hadoop的安装 1.1 上文进行了Hadoop的编译,将编译结果目录 hadoop-2.2.0 拷贝为 /usr/hadoop 目录 ...
- Gradle sync failed: failed to find Build Tools revision 21.1.2
从github上下载了一个开源项目到Android Studio 出现以下问题: 下午2:56:05 Gradle sync started下午3:00:11 Gradle sync failed: ...
- ASIHTTPRequest中的DELETE、PUT、GET、POST请求实例-备用
感谢分享 // ASIFormDataRequestTests.m // Part of ASIHTTPRequest -> http://allseeing-i.com/ASIHTTPRe ...
- BZOJ3713: [PA2014]Iloczyn
3713: [PA2014]Iloczyn Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 206 Solved: 112[Submit][Status ...
- jQuery 1.6+ 中attr()与prop() 区别
最近在写一个关于checkbox全选与取消全选的优化方法时,看到很多高手用到了.prop(). 于是在jquery的帮助文档查了一下,才知道这是在jquery 1.6.1中新加的方法,用来设置属性.但 ...
- osip及eXosip的编译方法
osip及eXosip的编译方法 在最新版本的osip2.exosip2中不支持在VC6.0下编译osip.exosip协议栈的方法 说明: 1.以下文章中的osip版本为3.1.0 2.eXosip ...
- C# - 使用ConfigurationManager保存数据到App.config
1. ConfigurationManager的命名空间:using System.Configuration; 2. To be able to save you have to use a con ...
- 学完 JAVA SE后学什么 。。。
我觉得学习j2ee一定要循序渐进,千万不要太急了.把java基础打牢一点,再牢一点.各位,你们在后面学习什么 struts,hibernate,spring,ajax..都很轻松. 第一个阶段(jav ...