serialize

   

serialize

   CObject::Serialize
  
   virtual void Serialize( CArchive& ar );
  throw( CMemoryException );
  throw( CArchiveException );
  throw( CFileException );
  参数:
  ar 被串行化的CArchive对象。
  说明:
  从档案文件中读取该对象或向档案文件中写入该对象。
  必须为希望串行化的每个类覆盖Serialize。被覆盖的Serialize首先必须调用基类的Serialize函数。
  在类的声明中必须使用DECLARE_SERIAL宏,并且在类的执行过程中也必须使用IMPLEMENT_SERIAL宏。
  使用CArchive::IsLoading或CArchive::IsStoring函数,用于决定是否装载或存储了档案文件。
  通过CArchive::ReadObject和CArchive::WriteObject来调用Serialize函数。这些函数与CArchive插入操作符()相关联。
  如果要了解有关串行化的例子,请参阅联机文档“Visual C++程序员指南” 中的“串行化(对象永久化)”。
  实现序列化的的类需要满足的五个条件:
  1. 该类需要从CObject类派生(可以是间接派生);
  2. 在类中中进行DECLARE_SERIAL宏定义;
  3. 类存在有缺省的构造函数;
  4. 类中实现了Serialize()函数,并且在其中调用基类的序列化函数;
  5. 使用IMPLEMENT_SERIAL宏指明类名及版本号;
  序列化的作用及局限:
  序列化简化了对象的保存和载入,为对象提供了持久性。但是,序列化本身仍具有一定的局限性。由于序列化一次从文件中载入所有对象,因此,它不适合于大文件编辑器和数据库。对于数据库和大文件编辑器,它们每次只是从文件中读入一部分。此时,就不应该采用文档的序列化机制来直接读取和保存文件了。另外,使用外部文件格式(预先定义的文件格式而不是本应用程序定义的文件格式)的程序一般也不使用文档的序列化。
  示例:
  请参阅ObList::CObList,了解所有CObject示例中使用的CAge类。
   // example for CObject::Serialize
   void CFileSerializeDoc::Serialize(CArchive& ar)
  {
  if (ar.IsStoring())
  {
  ar << m_sizeDoc; //m_sizeDoc信息序列化到ar
  }
  else
  {
  ar >> m_sizeDoc; //ar序列化到m_sizeDoc
  }
  m_strokeList.Serialize(ar);//序列化m_strokeList
  }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值