转发自:
串行化意味着对象将其状态保存在字节流中,并使用字节流来重建对象. 实例化实现了保存和加载文档数据的幕后工作mfc序列化,而MFC通过序列化实现了应用程序的文档读写功能.
序列化的基本思想是: 一个类应该能够读写其自身成员变量的数据,并且可以通过读取操作来重新创建对象. 也就是说,对象可以将其当前状态(由其成员变量的值表示)写入永久性存储(通常称为磁盘),然后可以从永久性存储中读取(加载)对象的状态以重构对象. 对象. 类的对象本身应具有将状态值写入磁盘或从磁盘读取状态值的方法(即成员函数). 保存和还原此类对象的过程称为序列化.
通过CArchive类对象作为中介,可以完成文档数据的序列化操作. CArchive类对象是由应用程序框架创建的,并且与用户正在使用的文件相关联.
CArchive类对象提供了一种安全的缓冲机制,用于在CFile类对象中读写可序列化的数据,并且它们之间形成以下关系:
Serialize()函数CArive类对象CFile类对象磁盘文件
可序列化的类必须具有一个称为Serialize()的成员函数,并且文档的序列化是在文档类的成员函数Serialize()中进行的.
当用户在文件菜单中选择“新建”,“打开”,“保存”和“另存为”菜单命令时,将调用文档类的派生类的成员函数Serialize()来实现与序列化有关的操作.
CArchive类对象是单向的,也就是说mfc序列化,不可能通过CArchive类对象保存和读取文档. 通过调用CArchive类的成员函数IsStoring()来检索当前CArchive类对象的属性. 如果使用CArchive类对象写入数据,则函数IsStoring()返回TRUE;如果使用CArchive类对象读取数据,则函数IsStoring()返回FALSE.
CArchive对象使用重载的insert()运算符执行读取和写入操作. 此方法与cin和cout中的输入和输出流非常相似,不同之处在于,此处处理对象,而cin和cout正在处理ASCII字符串.
请注意,MFC应用程序文件的序列化与不使用MFC序列化程序的其他文件格式不兼容. 如果以一般格式(例如TEXT)读写文件,则可以直接使用CFile类及其派生类.
序列化的主要任务是设计序列化的类. MFC应用程序实现类的序列化必须满足以下四个条件: (1)该类必须直接或间接地从CObject类派生; (2)该类必须定义一个没有参数的构造函数,当从磁盘文件加载时,进入文档时,调用该构造函数创建一个可序列化的对象,并使用从文件中读取的数据填充该对象的成员变量; (3)在类头文件中使用DECLARE_SERIAL宏,并在类实现文件IMPLEMENT_SERIAL宏中使用它; (4)重载自定义类中的序列化成员函数Serialize
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-285608-1.html