博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
反序列化笔记
阅读量:6809 次
发布时间:2019-06-26

本文共 818 字,大约阅读时间需要 2 分钟。

C++对象的序列化(Serialize)的一般化解决方法:。 
在jjhou的《深入浅出MFC》一书中,曾有部分章节提到了这个主题,MFC中也有类似的实例。只不过,我所需要的是更具有一般化意义的通用的解决方案。 
首要的一点,在一个包含类层次的设计中,我可以使用类的标示将对象的类型信息格式化输出到stream中,在从stream中读取时,解析这个类型信息来决定实例化哪一个类。 
显而易见的问题是,类自己可以正确的识别stream中的内容是否与自己的类型相匹配,可是作为类的使用者来说,他并没有简单的方法获知应该使用这个stream来实例化哪一个类。 最简单的方法,就是使用从stream中提取类型信息,进行判断,然后显式的调用相应类的构造函数进行实例化。但是,这样造成的问题,就是在客户代码中进行了硬编码,导致设计缺乏灵活性。 
可以使用《Design   Pattern》中提到的创建型模式来解决缺乏弹性的问题。我的考虑是可以采用prototype模式,在类库中使用singleton模式实例化所有支持序列化的类,并提供一个在类型标示信息(典型的是字符串)和实际类型的对象指针之间的单一映射(map)。 
这样,客户代码仅需要使用映射关系去匹配stream中的类型信息,即可以正确的实例化类,但是必须满足的库的设计要求是所有的类必须从一个共同的基类祖先派生(可以是多次)而来,同时序列化功能必须是虚函数,才可以籍由一个单一的指针来实例化所有可能的类型。 
最后的结果,类库的层次的更改,不影响用户代码的正确性。 最后的问题是,如果我要对一个已知的类体系提供序列化支持,怎样才可以有更通用的解决方案呢?

两个map: 

一个map把类型的typeID和指向生成生成此类对象的函数的指针(static)相关联,解决不能由字符串生成类对象的问题. 
一个map把ObjectID和指向该Object的指针相关联,解决程序再次运行时对象的内存地址变化的问题.

 

 

 

转载地址:http://biwzl.baihongyu.com/

你可能感兴趣的文章
揭秘 Google Titan M 芯片:Pixel 3 的终极保镖是如何炼成的?
查看>>
设置外部查找工具来索引 Confluence 6
查看>>
如何使用 Gin 和 Gorm 搭建一个简单的 API 服务 (三)
查看>>
Webpack 和 Gulp 构建伪命令行项目
查看>>
在线面试, 前端, 提纲, 草稿
查看>>
hive_异常_01_ Terminal initialization failed; falling back to unsupported
查看>>
分布式事务键值数据库 TiKV 加入 CNCF 沙箱孵化器
查看>>
pycharm2017 pro激活码
查看>>
自助搭建git服务
查看>>
Vue - day1
查看>>
kvm.virsh常用命令篇
查看>>
[Hive]Hive使用指南四 客户端导入数据
查看>>
10.JUC线程高级-线程八锁
查看>>
Apache Flink轻量级异步快照机制源码分析
查看>>
PostgreSQL 11 preview - 分区表 增强 汇总
查看>>
MediaCodec在Android视频硬解码组件的应用
查看>>
HTML5跨域消息发送安全性分析
查看>>
用JAVA自己画一张二维码
查看>>
Two Bit Circus又获1500万美元融资,欲打造VR微型游乐园
查看>>
阿里巴巴宣布成立半导体公司,要自主研发芯片
查看>>