一、作用
以二进制流(数据流 )形式,读写硬盘文件,效率高,速度快
二、使用方法
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、运行结果:
三、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;//开始指针
};