惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

宝玉的分享
宝玉的分享
Security Latest
Security Latest
S
Secure Thoughts
H
Heimdal Security Blog
The Last Watchdog
The Last Watchdog
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
S
Security Affairs
PCI Perspectives
PCI Perspectives
C
CERT Recently Published Vulnerability Notes
C
CXSECURITY Database RSS Feed - CXSecurity.com
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
有赞技术团队
有赞技术团队
爱范儿
爱范儿
腾讯CDC
P
Privacy & Cybersecurity Law Blog
量子位
T
Threat Research - Cisco Blogs
V
V2EX
S
Schneier on Security
P
Proofpoint News Feed
美团技术团队
Apple Machine Learning Research
Apple Machine Learning Research
Forbes - Security
Forbes - Security
The Hacker News
The Hacker News
月光博客
月光博客
C
Cybersecurity and Infrastructure Security Agency CISA
Schneier on Security
Schneier on Security
L
LINUX DO - 最新话题
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
V
Visual Studio Blog
S
SegmentFault 最新的问题
G
GRAHAM CLULEY
人人都是产品经理
人人都是产品经理
Hacker News - Newest:
Hacker News - Newest: "LLM"
博客园 - 叶小钗
罗磊的独立博客
WordPress大学
WordPress大学
www.infosecurity-magazine.com
www.infosecurity-magazine.com
C
Cisco Blogs
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
T
Tenable Blog
D
Darknet – Hacking Tools, Hacker News & Cyber Security
W
WeLiveSecurity
V
Vulnerabilities – Threatpost
Last Week in AI
Last Week in AI
Google DeepMind News
Google DeepMind News
博客园 - 聂微东
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻

博客园 - CC

项目管理小记 聊聊程序员绩效那点事 救火队员的那些事(4)-关于流控 我对程序员身体健康的一点感悟 救火队员的那些事(3) 救火队员的那些事(2) 救火队员的那些事(1) jvm的代码缓存耗尽导致性能下降 几次印象深刻的网上事故 是时候对十二年的工作回顾了! 入园10年了 如何读程序设计艺术第1.2节 读TAOCP的算法形式化定义以及归纳法的一点感受 用了半年时间终于把具体数学看完了. 最近几个月潜心修练Concrete Mathematics的一点感想 Solaris下误删除根目录下文件的解决之道 Exercises of Concrete Mathematics 具体数学 一次LoadRunner的CPC考试经历
MFC的序列化的一点研究.
CC · 2005-08-20 · via 博客园 - CC

   最近“下岗”在家,前一段时间一直在研究MFC的源代码,觉得越是深入越是有意思,特别是最近一周对MFC中对于序列化的支持,总算是研究明白它的整个实现过程,对于序列化的一点分析见解如下,如有不正确的地方,还请多多指教。
     序列化主要涉及到一个是写入磁盘,一个是如何从磁盘中读出数据,特别是如何写入一个Object,下面以一个例子来说明过程.
     class CMyObject:public CObject {
public:
        DECLARE_SERIAL()
        void Serialize(CArchive& ar);

        int     m_nFoo;
        CString   m_strFoo;
    }
    首先我们的一个类派生自CObject,并有了动态创建的功能,还有一些其它的额外的好处了,我们这里要重写Serialize这个虚函数,在这个函数中我们写我们自己的序列化代码,我们可以存入类成员变量....
  在实现的地方我们加上:
    IMPLEMENT_SERIAL( CMyObject,CObject,1)
     void  CMyObject::Seralize(CArchive& ar) {
     //如果是写入
    if ( ar.IsStoring()) {
            
            ar<<m_nFoo;
            ar<<m_strFoo;
    } else {
            ar>>m_nFoo;
            ar>>m_strFoo;
   }

}
   这个过程涉及的代码比较多,我在这里不把代码列出,只说一下大概的过程,大家如果有兴趣看看这几个文件: filecore.cpp ,arccore.cpp,arcobj.cpp, afx.h
 1.当我们进行写盘的时候,比如:
        CMyObject obj;
        ar.WriteObject(&obj);
        如果首次写入该类的实例的话,它写入一些关于类的信息,包括类标识,Schema,类名长度,以及类名,注意这个类名以后用于读出的时候再生对象时候用的,然后再调用我们写的序列化代码,写入实际的数据。以后再写入此类的数据时,并不再写入此类的完整信息,而只是此类的CRuntimeClass的地址在CArchive的内部维护的一个CMapPtrToPtr中的index与一个常量的位与,这个也用于以后再读入时用的。还有一种写入的情况就是同样的一个地址的变量写入不止一次的时候,除了第一次写入,以后只是写入一个以前的写入的一个对象的一个下标....
       内容较多,下次再写吧!