0
点赞
收藏
分享

微信扫一扫

MFC序列化及反序列化变量


你说什么最难受,是相爱的人见不了面,还是最爱的人在别人身边。。。

 

----  网易云热评

 

一、作用

以二进制流(数据流 )形式,读写硬盘文件,效率高,速度快


二、使用方法

1、写(序列化)数据

定义ar对象,ar将维护一块buff。

依次序列化每一个数据到ar维护的buff中。

如果buff空间不足,将ar维护buff中的数据存入硬盘文件,同时重置当前指针。

当关闭ar对象时,将ar维护的buff中的剩余数据存入硬盘文件。

void Store() {
CFile file;
//创建并打开文件
file.Open("e:/a.txt", CFile::modeCreate | CFile::modeWrite);

//定义归档类对象,ar将维护一块buff
CArchive ar(&file, CArchive::store, 4096);
//读(反序列化、加载)写(序列化、存储)操作
long age = 18;
ar << age;
float score = 88.5;
ar << score;
CString name = "zhangsan";
ar << name;
//关闭归档类对象和文件
ar.Close();
file.Close();
}

2、读(反序列化)数据

定义ar对象,ar将维护一块buff。

当反序列化第一个数据时,需要将硬盘文件中数据尽可能多的读入ar维护的buff中,然后反序列化第一个数据

当反序列化后续数据时,直接从ar维护buff中读取

当关闭a对象时,将ar维护的buff释放

void Load() {
CFile file;
file.Open("e:/a.txt", CFile::modeRead);
//将文件数据全部读入ar维护buff中
CArchive ar(&file, CArchive::load, 4096);
//再从缓存区汇中读取
long age;
ar >> age;
float score;
ar >> score;
CString name;
ar >> name;
printf("age=%d, score=%f, name=%s\n", age, score, name);
ar.Close();
file.Close();
}

 

3、调用

int main() {
Store();
Load();
return 0;
}

4、运行结果:

MFC序列化及反序列化变量_数据

 

三、CArchive数据结构

    

class CArchive
{
enum Mode { store = 0, load = 1..};
BOOL m_nMode; //访问方式
int m_nBufSize; //buff的大小
CFile* m_pFile; //操作的文件的对象
BYTE* m_lpBufCur; //当前指针
BYTE* m_lpBufMax; //尾指针
BYTE* m_lpBufStart;//开始指针
};

 

MFC序列化及反序列化变量_数据_02

MFC序列化及反序列化变量_变量_03

举报

相关推荐

0 条评论