62_序列化

序列化

作用

    • 读档(反序列化):把文件中的对象读取到内存–对象的个数和类型信息
    • 存档(序列化):把内存中对象保存到文件

流行方式

    • 使用XML存储序列化

纯C++使用

单个类的时候

存档

      • 应该存储对象的个数到最前面
      • 常规做法是类对象提供函数写文件,对输出运算符做重载
      • 存档的时候使用二进制存
      • 对象能存进去也应该能读出来

读档

      • 使用堆申请空间,读取文件中的对象,因为栈不能确定读取的大小
      • 运算符重载

多个类的时候

存档

      • 不知道申请的是什么类对象,需要把类的类型信息存进去

读档

      • 不知道申请的是什么类对象,需要把类的类型读出来判断

MFC快速序列化的机制

序列化

    • 改造类支持虚拟列API:CArchive,底下的连接点第一个,再底下第一个

五个定义步骤

      • 继承CObject
      • 重写虚函数Serialize
        • IsStoring()如果为真,序列化,否则反序列化
        • 如果子类想使用父类的成员,调用父类
      • 在类的声明中使用DECLARE_SERIAL宏
        • 参数:当前类名
      • 提供一个无参构造
      • 在类的实现文件中使用IMPLEMENT_SERIAL宏
        • 参数:当前类名,当前父类,架构号(可能会加成员,为了兼容)

使用

      • CFile打开文件,Carchive访问
        • 参数(CFile指针,存档,缓冲区大小,缓冲区的指针);
      • 然后使用重载的流运算符读或者存
      • 关闭Carchive
      • 关闭文件

MFC里面序列化存储方式

PASCII字符串模式

反序列化

使用

CArchive a(CFile指针,读档)

父类指针 xx = nullptr

A >> xx;

作业

CAD加上保存和读档

https://github.com/xkkhh/Cracking/tree/master/09CAD06

0 条评论
发表一条评论