(19)中华人民共和国国家知识产权局
(12)发明专利说明书
(10)申请公布号 CN 103778248 A
(43)申请公布日 2014.05.07
(21)申请号 CN201410054437.3
(22)申请日 2014.02.18
(71)申请人 成都致云科技有限公司
    地址 610000 四川省成都市高新区芳草东街76号4层
(72)发明人 黄睿
(74)专利代理机构 成都顶峰专利事务所(普通合伙)
    代理人 杨俊华
(51)Int.CI
字符串转数组编码方式      G06F17/30
                                                                  权利要求说明书 说明书 幅图
(54)发明名称
      高效自描述的复杂数据对象序列化方法
(57)摘要
      本发明公开了一种高效自描述的复杂数据对象序列化方法,主要解决了现有技术中存在的对象序列化处理能力有限,使用和维护较为不便,缺乏统一和一致性的问题。该方法为每种异构消息创建一个用于标识其类型的唯一消息ID,并创建零个或一个以上用以标识各异构消息所需传递的属性值的参数,创建各参数的唯一ID、值类型和二进制保存的值内容,并根据异构消息的消息ID,采用二进制方式实现序列化和反序列化。通过上述方案,本发明达到了便于管理和维护,减少出错记录,提高数据处理能力的目的,具有很高的实用价值和推广价值。
法律状态
法律状态公告日
法律状态信息
法律状态
2017-12-22
专利权的转移
专利权的转移
2017-07-11
授权
授权
2014-06-04
实质审查的生效
实质审查的生效
2014-05-07
公开
公开
权 利 要 求 说 明 书
1.高效自描述的复杂数据对象序列化方法,其特征在于,包括:       
为每种异构消息创建一个用于标识其类型的唯一消息ID,并创建零个或一个以上用以标识各异构消息所需传递的属性值的参数,创建各参数的唯一ID、值类型和二进制保存的值内容;       
序列化时:       
(1)将待序列化异构消息的消息ID用二进制方式保存在数据包头;       
(2)遍历异构消息的参数清单,依次将该异构消息的参数序列化为二进制格式追加至存储有消息ID的数据包,直至所有参数处理完毕,完成对该异构消息的序列化;       
反序列化时:       
(a)读取待反序列化的异构消息的消息ID;       
(b)依次读取该异构消息的参数类型,根据类型对参数的二进制数据包进行解码,获得参数值;       
(c)根据参数ID将获取的参数值进行保存,直至数据包读取完毕,完成对该异构消息的反
序列化。       
2.根据权利要求1所述的高效自描述的复杂数据对象序列化方法,其特征在于,所述参数二进制格式由用于区分不同参数的key和标记参数值类型的value构成。       
说  明  书
<p>技术领域   
本发明涉及一种复杂数据对象序列化方法,具体地说,是涉及一种高效自描述的复杂数据对象序列化方法。   
背景技术   
对象序列化、反序列化是现代网络通讯和远程调用技术的基石,序列化方法将逻辑对象转换为数据包,通过网络发送到远端,远端服务器接收到数据包后,将其反序列化获得原始逻辑对象,再进行解析和处理。   
为了提高应用效果,要求序列化方法需达到性能、易用性、可扩展性各方面的平衡。目前业内使用最广泛、评价最高的是谷歌的Protocol Buffers方案,它使用.proto文件定义序列化对象接口,根据proto定义生成序列化、反序列化接口代码,使用时用户程序调用接口代码进行序列化和反序列化操作,由于Protocol Buffers使用二进制流编码,带宽占用和处理速度都远远强于传统的xml、json等方案,而且有前向兼容性,更新定义升级后不影响使用,接口设计也简单,所以是目前最受欢迎的序列化方案之一。   
但是对于大型通讯系统,Protocol Buffers存在以下缺陷:   
Protocol Buffers对于一些复杂类型,比如数组的数组、字符串数组等结构需要通过嵌套消息或者多次序列化来处理,处理性能会严重下降;   
Protocol Buffers序列化数据仅保留数据部分,要成功反序列化接收端必须拥有同一份proto文件,根据文件里的消息定义才能解析,使用和维护都不方便;   
一个大型系统里通常会有非常多的对象需要序列化,但是Protocol Buffers需要为每一种对象定义一个独立的proto文件,并生成一个独立的解析代码,在一个实际项目里,这样会产生非常多的额外文件,不利于代码管理,也缺乏统一和一致性。   
发明内容   
本发明的目的在于提供一种高效自描述的复杂数据对象序列化方法,主要解决现有技术中存在的对象序列化处理能力有限,使用和维护较为不便,缺乏统一和一致性的问题。   
为了实现上述目的,本发明采用的技术方案如下:   
高效自描述的复杂数据对象序列化方法,包括:   
为每种异构消息创建一个用于标识其类型的唯一消息ID,并创建零个或一个以上用以标识各异构消息所需传递的属性值的参数,创建各参数的唯一ID、值类型和二进制保存的值内容;   
序列化时:   
(1)将待序列化异构消息的消息ID用二进制方式保存在数据包头;   
(2)遍历异构消息的参数清单,依次将该异构消息的参数序列化为二进制格式追加至存储有消息ID的数据包,直至所有参数处理完毕,完成对该异构消息的序列化;   
反序列化时:   
(a)读取待反序列化的异构消息的消息ID;   
(b)依次读取该异构消息的参数类型,根据类型对参数的二进制数据包进行解码,获得参数值;   
(c)根据参数ID将获取的参数值进行保存,直至数据包读取完毕,完成对该异构消息的反序列化。   
进一步地,所述参数二进制格式由用于区分不同参数的key和标记参数值类型的value构成。   
与现有技术相比,本发明具有以下有益效果:   
(1)本发明中,无需独立定义文件和解析代码,一个大型系统内只需要维护一份参数值定义文件即可,便于统一管理、减少出错记录,且有效降低了维护难度,大幅度提高了复杂数据处理性能,符合实际需求。   
具体实施方式   
下面结合附图和实施例对本发明作进一步说明,本发明的实施方式包括但不限于下列实施例。   

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。