WEB开发网
开发学院软件开发VC Visual C++中对象的序列化与文件I/O研究 阅读

Visual C++中对象的序列化与文件I/O研究

 2008-11-13 19:32:36 来源:WEB开发网   
核心提示:持久性和序列化持久性是对象所有的保存和加载其状态数据的能力,具有这种能力的对象能够在应用程序结束之前以某种方式将当前的对象状态数据记录下来,Visual C++中对象的序列化与文件I/O研究,当程序再次运行时,通过对这些数据的读取而恢复到上一次任务结束时的状态,SIZE,POINT和RECT等,由于绝大多数的MFC类是

持久性和序列化

持久性是对象所有的保存和加载其状态数据的能力。具有这种能力的对象能够在应用程序结束之前以某种方式将当前的对象状态数据记录下来,当程序再次运行时,通过对这些数据的读取而恢复到上一次任务结束时的状态。由于绝大多数的MFC类是直接或间接由MFC的CObject类派生出来的,因此这些MFC类都具有保存和加载对象状态的能力,是具有持久性的。在使用应用程序向导生成文档/视结构的程序框架时,就已经为应用程序提供了用于对象状态数据保存和加载的基本代码。

为实现对象的持久性,通常多以字节流的形式将记录对象状态的数据存放到磁盘上,这种将状态数据保存到磁盘和从磁盘恢复到内存的过程称为序列化。序列化是MFC的一个重要概念,是MFC文档/视图结构应用程序能进行文档打开、保存等操作的基础。当在MFC框架程序中装载或保存一个文件时,除了打开文件以供程序读写外,还传递给应用程序一个相关的CArchive对象,并以此实现对持久性数据的序列化。

大多数MFC应用程序在实现对象的持久性时并非直接用MFC的CFile类对磁盘文件进行读写(有关CFile类的详细介绍将在下一节进行),而是通过使用CArchive对象并由其对CFile成员函数进行调用来执行文件I/O操作。CArchive类支持复合对象的连续二进制形式的输入输出。在构造一个CArchive对象或将其连接到一个表示打开的文件的CFile对象后,可以指定一个档案是被装载还是被保存。MFC允许使用操作符“<<”和“>>”来对多种原始数据类型进行序列化。这些原始数据类型包括BYTE,WORD,LONG,DWORD,float,double,int,unsigned int,short和char等。

对于其他由MFC类来表示的非原始数据类型如CString对象等的序列化则可以通过对“<<”和“>>”运算符的重载来解决,可以用此方式进行序列化的MFC类和结构有CString,CTime,CTimeSpan,COleVariant,COleCurreny,COleDateTime,COleDateTimeSpan,CSize,CPoint,CRect,SIZE,POINT和RECT等。除了操作符“<<”和“>>”之外还可以调用CArchive类成员函数Read()和Write()来完成序列化。下面这段代码展示了通过操作符对int型变量VarA、VarB的序列化过程:

1 2 3 4 5 6  下一页

Tags:Visual 对象 序列化

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接