序列化就是往硬盘上写文件

文档读写的类 CFile

CFile::Open CFile::Write/Read CFile::Close CFile::SeekToBegin/SeekToEnd/Seek //控制光标位置

序列化机制使用(内置类型)

写文件时需要先把文件写到CArchive的缓冲区,再把缓冲区写道硬盘上 CFile 文档操作类,完成硬盘文件的读写操作 CArchive 归档类,完成内存数据的读写操作

CFile::Open 创建或者打开文件 CArchive ar(&file,mode,size); 定义归档类对象,构造传入文档类对象、读取方式和缓冲区大小 ar<<数据; 序列化(存储/写) ar.close(); 关闭归档类对象 CFile::Close(); 关闭文件

class CArchive{

enum MODE{

store=0,load=1,...};

BOOL m_nMode;//访问方式

int m_BufSize;//缓存大小

CFile* m_File;//文件类对象

BYTE* m_lpBufCur;//当前指向,维护缓冲区里指针当前指向地址

BYTE* m_lpBufMax;//终止指向,维护缓冲区尾地址

BYTE* m_lpBufStart;//开始指向,维护缓冲区首地址

......

};

序列化:

CFile file;

file.Open("E:/MFC/serial.txt", CFile::modeCreate|CFile::modeWrite);

CArchive ar(&file, CArchive::store, 4096);//归档类对象,维护缓冲区。

//构造函数过程做了以下内容:

//首先是给ar对象各个成员变量赋值

//其次,根据传入的缓冲区大小new一个数组,并返回地址到m_lpBufStart

//根据缓冲区大小和m_lpBufStart计算出m_lpBufMax

//令m_lpBufCur ===m_lpBufStart

long age = 18;

ar<

CString str = "ZhangSan";

ar<

//长度是unsigned char类型,占据一个字节,m_lpBufCur自加1

//然后把字符转复制到m_lpBufCur指向的地址,m_lpBufCur自加字符串的长度

//CMyDoc data(18, 88.5, "zhangsan");

//ar << &data; //序列化对象,就是将对象的各个成员变量序列化。

ar.Close( );//之前的所有内容只是把数据存到堆里面去了,但是还没有写到硬盘里

//在Close函数里面,统一把所有的数据写道硬盘里,写入字节大小就是堆里所有数据加起来大小,即m_lpBufCur-m_lpBufStart

<

好文阅读

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: