MFC 序列化的理解及困惑点

CGraphicDoc类的Serialize函数是序列化的发起者

都会调用

具体对象类的Serialize函数,也就是实现者

如何调用呢?

就是通过 “<<”、“ >>” 运算符

可以这么理解:

//具体类的序列化实现具体的从文件中读参数,从而构造对象
void CGraph::Serialize(CArchive& ar)
{if (ar.IsStoring()){ar << m_nDrawType << m_ptOrigin << m_ptEnd;}else{ar >> m_nDrawType >> m_ptOrigin >> m_ptEnd;}
}
//Doc类的序列化实现抽象的取对象操作,也就是搭个框架,软件自己调用对
应对象的构造函数申请heap空间,我们直接用就行了。。。

void CGraphicDoc::Serialize(CArchive& ar)
{POSITION pos = GetFirstViewPosition();CGraphicView* pView = (CGraphicView*)GetNextView(pos);if (ar.IsStoring()){// TODO: 在此添加存储代码int nCount = pView->m_ObArray.GetSize();ar << nCount;for (int i=0;i<nCount;i++){ar << pView->m_ObArray.GetAt(i);//pView->m_ObArray.GetAt(i)  这东西是个指向对象的指针,<< 运算符自己就调用这个对象的序列化函数了}}else{// TODO: 在此添加加载代码int nCount;ar >> nCount;CGraph* pGraph;for (int i=0;i<nCount;i++){ar >> pGraph;pView->m_ObArray.Add(pGraph);}}
}

我的、大概的、浅显的理解就是,对象的序列化函数在存储时 要实现把构造对象的所有元素都存到文件中,以实现构造一个完整的对象。

那么问题来了:如何存一个文件(一张图片)?
ar<<bufsize; ar.Write(pbuf,bufsize)

MFC 序列化的理解及困惑点相关推荐

  1. MFC序列化(serial)简单例子

    我们保存一些文本内容可以很简单的保存成一个文件就行了.但如果要把一些类对象信息保存起来,然后读取时用那些信息初始化一个类对象就比较复杂了.MFC提供了一个叫序列化的功能.可以把一个对象信息转化成二进制 ...

  2. [Serializable]序列化一句话理解

    所谓序列化,简单说就是将内存中的数据转换成可传输可永久性存储的媒介(类似于I/O) 转载于:https://www.cnblogs.com/daiguagua/articles/3039826.htm ...

  3. JAVA:说说你对序列化的理解

    本文主要内容 背景 在Java语言中,程序运行的时候,会产生很多对象,而对象信息也只是在程序运行的时候才在内存中保持其状态,一旦程序停止,内存释放,对象也就不存在了. 怎么能让对象永久的保存下来呢?- ...

  4. 理解SetWindowOrg,SetViewportOrg,SetWindowExt,SetViewportExt

    按习惯,(0,0)就原点,原点就是(0,0),但是如果用此来理解windows的map mode,就会走弯路.其实,稍微改变一下观念,windows的map mode就比较好理解了.举例说明:page ...

  5. Python Json序列化与反序列化

    在python中,序列化可以理解为:把python的对象编码转换为json格式的字符串,反序列化可以理解为:把json格式字符串解码为python数据对象.在python的标准库中,专门提供了json ...

  6. 心得---字节流、文件操作、对象序列化

    1. 抽象基类InputStream.OutputStream,不能实例化.                                 •      InputStream类是基本的输入类.它定 ...

  7. Mapreduce的序列化和流量统计程序开发

    一.Hadoop数据序列化的数据类型 Java数据类型 => Hadoop数据类型 int IntWritable float FloatWritable long LongWritable d ...

  8. Python中json和pickle模快dumps()、loads()、dump()、load()序列化和反序列化实例

    在python中,序列化可以理解为:把python的对象编码转换为json格式的字符串,反序列化可以理解为:把json格式字符串解码为python数据对象.在python的标准库中,专门提供了json ...

  9. pythonjson序列化_Python Json序列化与反序列化的示例

    不同的编程语言有不同的数据类型; 比如说: Python的数据类型有(dict.list.string.int.float.long.bool.None) Java的数据类型有(bool.char.b ...

  10. 用python实现接口测试(八、实现序列化与反序列化)

    前言 在python中,序列化可以理解为:把python的对象编码转换为json格式的字符串,反序列化可以理解为:把json格式字符串解码为python数据对象. 一.字典,通过json把它序列化为j ...

最新文章

  1. Windows上通过VLC播放器搭建rtsp流媒体测试地址操作步骤
  2. 专访图灵奖得主John Hopcroft:中国必须提升本科教育水平,才能在AI领域赶上美国
  3. 如何使用vue.js 实现前台html页面和后台的数据绑定
  4. 网站SEO优化的高效手段有哪些?
  5. 中国在线直播教育行业发展形势与竞争策略研究报告2022-2028年
  6. 剑桥大学中国学联学术部文章
  7. php 基础 判断类型
  8. 聊聊HTTPS和SSL/TLS协议
  9. 【最近公共祖先】[COCI]STOGOVI
  10. uniapp怎么调起摄像头拍视频_抖音视频怎么拍?我们总结了10个手机视频拍摄小技巧...
  11. JavaScript综合项目:博客前端
  12. 刚过去不到一个月 QQ又更新了
  13. 润乾报表不显示的分析原因
  14. 不可不知的 Android strings.xml 那些事
  15. IDEA 编写JDBC 第一个示例
  16. Linux下conda镜像源配置
  17. python-线程互斥锁与递归锁
  18. Matlab中S-函数的编写
  19. 小米动态图标+android实现,创新设计动态图标
  20. 【面试分享】奇安信渗透测试工程师,通过!

热门文章

  1. python采用面向对象编程模式吗_python基础5-面向对象编程
  2. linux /home recovering journal,Ubuntu启动之后显示Recovering journal ,clean block。。。。问题`...
  3. LeetCode:每日一题(2020.4.6)
  4. FFmpeg学习(10)—— ffmpeg最全的命令参数
  5. Mybatis 数据库Mysql时间范围内数据查询非常慢的解决办法
  6. 时间格式 asp.net
  7. ubuntu18.04安装ros-melodic
  8. 论文笔记_S2D.39_2015-ICCV-条件随机场作为递归神经网络(CRF-RNN)
  9. 结构光相移法-多频外差原理+实践(上)
  10. 小米oj 组长偏头痛(二分)