MFC 中的序列化

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

序列化是在永久性存储介质(如磁盘文件)中写入或读取对象的过程。 对于需要在程序执行期间或之后维护结构化数据(例如 C++ 类或结构)状态的情况,序列化是理想的选择。 使用 MFC 提供的序列化对象能够以标准和一致的方式实现这一目的,从而使用户无需手动执行文件操作。

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

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

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

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

注意

不要将 CArchive 类与仅用于格式化文本的通用 iostream 类混淆。 CArchive 类用于二进制格式的序列化对象。

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

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

序列化:序列化与数据库输入/输出一文介绍了序列化可作为数据库应用程序中适当输入/输出技术的适用情况。

另请参阅

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