针对文件进行数据序列化

持久化的基本思路是,对象应能够将其当前状态(通常由其成员变量的值指示)写入持久存储中。 之后,通过从持久存储中读取(即反序列化)对象的状态,可以重新创建该对象。 这里的关键点是对象本身负责读取和写入其自己的状态。 因此,要使一个类持久化,它必须实现基本的序列化操作。

框架提供了一个默认实现,用于将文档保存到磁盘文件来响应“文件”菜单上的“保存”和“另存为”命令,并用于从磁盘文件加载文档来响应“打开”命令。 只需非常少的操作,就能实现文档在文件中写入和读取其数据的能力。 必须执行的主要操作是替代文档类中的 Serialize 成员函数。

MFC 应用程序向导会在为你创建的文档类中放置 CDocument 成员函数 Serialize 的框架替代项。 实现应用程序的成员变量后,可使用将数据发送到与文件连接的“存档对象”的代码填充 Serialize 替代项。 CArchive 对象类似于 C++ iostream 库中的 cin 和 cout 输入/输出对象。 但是,CArchive 会写入和读取二进制格式,而不是格式化文本。

你想进一步了解什么

文档在序列化中的角色

框架通过调用文档的 Serialize 成员函数(如果已实现),自动响应“文件”菜单的“打开”、“保存”和“另存为”命令。 例如,ID_FILE_OPEN 命令在应用程序对象中调用处理程序函数。 在此过程中,用户会看到并响应“文件打开”对话框,而框架会获得用户选择的文件名。 框架会创建一个设置用于将数据加载到文档中的 CArchive 对象,并将存档传递给 Serialize。 框架已打开该文件。 文档的 Serialize 成员函数中的代码通过存档读取数据,根据需要重新构造数据对象。 有关序列化的详细信息,请参阅序列化一文。

数据在序列化中的角色

通常,类类型数据应该能够序列化其自身。 也就是说,在将对象传递给存档时,该对象应知道如何将自身写入存档,以及如何从存档中读取自身。 MFC 支持以这种方式使类可序列化。 如果设计类来定义数据类型,并且打算序列化该类型的数据,请设计序列化。

另请参阅

使用文档