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