学习笔记01-序列化与反序列化

本文介绍了在C/C++中如何手工实现序列化和反序列化,以及利用MFC框架进行序列化操作。通过游戏存档和读档的比喻,将序列化理解为对象写入文件,反序列化为对象从文件读入内存。内容包括手工序列化的三个步骤和反序列化的注意事项,以及使用MFC进行序列化时改造类的五个步骤和实现细节。
摘要由CSDN通过智能技术生成

前言

百度了一下关于序列化和反序列化的文章,大多都是在Java下讨论的,我的老师教我的是在C/C++中实现手工序列化/反序列化,以及调用MFC中的序列化/反序列化框架。

初一看,序列化和反序列化,从字面上很不好理解,感觉好深奥哦,晦涩难懂、望而生畏,然而我的老师举了个例子就豁然开朗了:你玩过游戏不?经历过游戏没存档,又要重玩儿的痛苦不?
图片来源于网络这里:
序列化就理解为“存档”-内存中的对象写入到文件的过程;
反序列化就理解为“读档”-文件中的对象读入到内存的过程。
好理解了吧。

手工序列化(serialize)

最简单的序列化C/C++实现思路

1.定义一个类

class CA
{
public:
	CA() {};//默认构造
	CA(string strString, int Val) :m_strString(strString),m_nVal(Val){}//初始化列表

	//序列化公有成员函数
	void Serialize(fstream& fs)
	{
		fs << m_strString;
		fs.write((char*)&m_nVal, sizeof(m_nVal));
	}
	
private:
	string m_strString;//字符串类型私有数据成员
    int m_nVal;        //整形私有数据成员
};

2.实例化类对象,并写入文件

void Serialize()
{
	//实例化类对象
	CA a1("aaaaaaaa", 1);
	CA b1("bbbbbbbb", 2);
	CA c1("cccccccc", 3);	
	
	//打开文件
	fstream fs;
	fs.open("serialize.data", ios::in | ios::out | ios::trunc);
	if (!fs.is_open())
	{
		cout << "无法打开文件" << endl;
		return;
	}	

	int nObjCnt = 3;
	fs.write((char*)&nObjCnt, sizeof(nObjCnt));

	//调用序列化函数将类对象写入文件
	a1.Serialize(fs);
	b1.Serialize(fs);
	c1.Serialize(fs);
	   
	//关闭文件
	fs.close();
}

3.结果显示

在这里插入图片描述

手工反序列化(deserialize)

“存档”时应当考虑“读档”需要的信息

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值