MFC 中的序列化

本文介绍Microsoft基础类库(MFC)中提供的序列化机制,以允许对象在程序运行之间保留。

序列化是向永久性存储介质(如磁盘文件)写入或读取对象的过程。 序列化非常适合在程序执行期间或之后维护结构化数据(如C++类或结构)的状态的情况。 使用 MFC 提供的序列化对象可以采用标准和一致的方式进行,从而减轻用户手动执行文件作的需要。

MFC 为类 CObject中的序列化提供内置支持。 因此,派生自 CObject 的所有类都可以利用 CObject其序列化协议。

序列化的基本思路是,对象应能够将其当前状态(通常由其成员变量的值指示)写入持久存储。 稍后,可以通过从存储中读取或反序列化对象的状态来重新创建对象。 序列化处理对象指针和对对象进行序列化时使用的对象的所有详细信息。 一个关键点是,对象本身负责读取和写入其自己的状态。 因此,要使类可序列化,它必须实现基本序列化作。 如文章序列化组中所示,可以轻松地将此功能添加到类。

MFC 使用类的对象 CArchive 作为要序列化的对象和存储介质之间的中介。 此对象始终与一个 CFile 对象相关联,该对象从中获取序列化所需的信息,包括文件名以及所请求的作是读还是写。 执行序列化作的对象可以使用 CArchive 对象,而不考虑存储介质的性质。

对象 CArchive 使用重载插入(<<)和提取(>>)运算符来执行写入和读取作。 有关详细信息,请参阅序列化文章中的“序列化:序列化对象”中的 “通过存档存储和加载 CObjects ”。

注释

不要将 CArchive 类与常规用途 iostream 类混淆,这些类仅用于格式化文本。 该 CArchive 类适用于二进制格式序列化对象。

如果需要,可以绕过 MFC 序列化,为持久性数据存储创建自己的机制。 需要重写在用户命令中启动序列化的类成员函数。 请参阅 技术说明 22 中的ID_FILE_OPEN、ID_FILE_SAVE和ID_FILE_SAVE_AS标准命令中的讨论。

以下文章介绍了序列化所需的两个主要任务:

序列化 :序列化与数据库输入/输出 一文介绍了序列化何时是数据库应用程序中的相应输入/输出技术。

另请参阅

概念
常规 MFC 主题
CArchive 类
CObject 类
CDocument 类
CFile 类