持久性的基本概念是,对象应能够将其当前状态(由其成员变量的值指示)写入持久存储。 稍后,可以通过从永久性存储读取或“反序列化”对象的状态来重新创建对象。 此处的一个关键点是,对象本身负责读取和写入其自己的状态。 因此,要使类持久化,它必须实现基本序列化作。
该框架提供了一个默认实现,用于将文档保存到磁盘文件以响应“文件”菜单上的“保存和另存为”命令,以及用于从磁盘文件加载文档以响应 Open 命令。 工作很少,你可以实现文档在文件中写入和读取其数据的能力。 必须执行的主要作是重写文档类中的 Serialize 成员函数。
MFC 应用程序向导会在为其创建的文档类中放置成员函数Serialize
的CDocument
框架替代。 实现应用程序的成员变量后,可以使用将数据发送到连接到文件的“存档对象”的代码填充 Serialize
重写。
CArchive 对象类似于 C++ iostream 库中的 cin 和 cout 输入/输出对象。 但是, CArchive
写入和读取二进制格式,而不是格式化文本。
想要详细了解哪些内容
文档在序列化中的角色
框架通过调用文档的成员函数(如果已实现),自动响应“文件”菜单的 Serialize
“打开”、“保存”和“另存为”命令。 例如,ID_FILE_OPEN命令在应用程序对象中调用处理程序函数。 在此过程中,用户会看到并响应“文件打开”对话框,框架会获取用户选择的文件名。 该框架创建一个 CArchive
对象集,用于将数据加载到文档中,并将存档传递给 Serialize
。 框架已打开该文件。 文档 Serialize
成员函数中的代码通过存档读取数据,并根据需要重新构造数据对象。 有关序列化的详细信息,请参阅文章 序列化。
数据在序列化中的角色
一般情况下,类类型数据应能够序列化自身。 也就是说,将对象传递给存档时,该对象应知道如何将自身写入存档,以及如何从存档中读取自身。 MFC 支持以这种方式序列化类。 如果设计类来定义数据类型,并且打算序列化该类型的数据,请进行序列化设计。