高效自描述的复杂数据对象序列化方法

文档序号:6537956阅读:631来源:国知局
高效自描述的复杂数据对象序列化方法
【专利摘要】本发明公开了一种高效自描述的复杂数据对象序列化方法,主要解决了现有技术中存在的对象序列化处理能力有限,使用和维护较为不便,缺乏统一和一致性的问题。该方法为每种异构消息创建一个用于标识其类型的唯一消息ID,并创建零个或一个以上用以标识各异构消息所需传递的属性值的参数,创建各参数的唯一ID、值类型和二进制保存的值内容,并根据异构消息的消息ID,采用二进制方式实现序列化和反序列化。通过上述方案,本发明达到了便于管理和维护,减少出错记录,提高数据处理能力的目的,具有很高的实用价值和推广价值。
【专利说明】高效自描述的复杂数据对象序列化方法
【技术领域】
[0001]本发明涉及一种复杂数据对象序列化方法,具体地说,是涉及一种高效自描述的复杂数据对象序列化方法。
【背景技术】
[0002]对象序列化、反序列化是现代网络通讯和远程调用技术的基石,序列化方法将逻辑对象转换为数据包,通过网络发送到远端,远端服务器接收到数据包后,将其反序列化获得原始逻辑对象,再进行解析和处理。
[0003]为了提高应用效果,要求序列化方法需达到性能、易用性、可扩展性各方面的平衡。目前业内使用最广泛、评价最高的是谷歌的Protocol Buffers方案,它使用.proto文件定义序列化对象接口,根据proto定义生成序列化、反序列化接口代码,使用时用户程序调用接口代码进行序列化和反序列化操作,由于Protocol Buffers使用二进制流编码,带宽占用和处理速度都远远强于传统的xml、json等方案,而且有前向兼容性,更新定义升级后不影响使用,接口设计也简单,所以是目前最受欢迎的序列化方案之一。
[0004]但是对于大型通讯系统,Protocol Buffers存在以下缺陷:
Protocol Buffers对于一些复杂类型,比如数组的数组、字符串数组等结构需要通过嵌套消息或者多次序列化来处理,处理性能会严重下降;
Protocol Buffers序列化数据仅保留数据部分,要成功反序列化接收端必须拥有同一份proto文件,根据文件里的消息定义才能解析,使用和维护都不方便;
一个大型系统里通常会有非常多的对象需要序列化,但是Protocol Buffers需要为每一种对象定义一个独立的proto文件,并生成一个独立的解析代码,在一个实际项目里,这样会产生非常多的额外文件,不利于代码管理,也缺乏统一和一致性。

【发明内容】

[0005]本发明的目的在于提供一种高效自描述的复杂数据对象序列化方法,主要解决现有技术中存在的对象序列化处理能力有限,使用和维护较为不便,缺乏统一和一致性的问题。
[0006]为了实现上述目的,本发明采用的技术方案如下:
高效自描述的复杂数据对象序列化方法,包括:
为每种异构消息创建一个用于标识其类型的唯一消息ID,并创建零个或一个以上用以标识各异构消息所需传递的属性值的参数,创建各参数的唯一 ID、值类型和二进制保存的值内容;
序列化时:
(1)将待序列化异构消息的消息ID用二进制方式保存在数据包头;
(2)遍历异构消息的参数清单,依次将该异构消息的参数序列化为二进制格式追加至存储有消息ID的数据包,直至所有参数处理完毕,完成对该异构消息的序列化; 反序列化时:
(a)读取待反序列化的异构消息的消息ID;
(b)依次读取该异构消息的参数类型,根据类型对参数的二进制数据包进行解码,获得参数值;
(c)根据参数ID将获取的参数值进行保存,直至数据包读取完毕,完成对该异构消息的反序列化。
[0007]进一步地,所述参数二进制格式由用于区分不同参数的key和标记参数值类型的value构成。
[0008]与现有技术相比,本发明具有以下有益效果:
(I)本发明中,无需独立定义文件和解析代码,一个大型系统内只需要维护一份参数值定义文件即可,便于统一管理、减少出错记录,且有效降低了维护难度,大幅度提高了复杂数据处理性能,符合实际需求。
【具体实施方式】
[0009]下面结合附图和实施例对本发明作进一步说明,本发明的实施方式包括但不限于下列实施例。
实施例
[0010]为了解决现有技术中存在的对象序列化处理能力有限,使用和维护较为不便,缺乏统一和一致性的问题,本发明公开了一种使用统一方法对各种异构消息进行序列化和反序列化处理,且序列化后的二进制数据流可以自我描述,无需接口文件和独立的编解码代码就可正确反序列化回原始对象、且适用于复杂数据对象的序列化方法。
[0011]本发明中,每种异构消息都有一个唯一的消息ID,用来标识异构消息的类型,每个异构消息都包含零到多个参数,用来标识各种异构消息需要传递的属性值,每个参数都有自己的惟一 ID、值类型和二进制保存的值内容,通过此种设置,序列化通过以下方式实现:首先将消息ID用二进制方式保存在数据包头,再遍历消息的参数清单,依次将参数序列化成二进制形式追加到数据包,参数全部处理完毕时,序列化完成;相应地,反序列化时,首先读取消息ID,然后依次读取参数类型,根据类型对参数的二进制数据包进行解码,获得参数值,并根据参数ID保存到内存中,数据包全部读取完毕,反序列化完成。
[0012]根据不同的数据类型,本实施例中提供了相应的编码规则,如表I所示,常见的四个基本数据存储格式可如下:
表I
【权利要求】
1.高效自描述的复杂数据对象序列化方法,其特征在于,包括: 为每种异构消息创建一个用于标识其类型的唯一消息ID,并创建零个或一个以上用以标识各异构消息所需传递的属性值的参数,创建各参数的唯一 ID、值类型和二进制保存的值内容; 序列化时: (1)将待序列化异构消息的消息ID用二进制方式保存在数据包头; (2)遍历异构消息的参数清单,依次将该异构消息的参数序列化为二进制格式追加至存储有消息ID的数据包,直至所有参数处理完毕,完成对该异构消息的序列化; 反序列化时: Ca)读取待反序列化的异构消息的消息ID ; (b)依次读取该异构消息的参数类型,根据类型对参数的二进制数据包进行解码,获得参数值; (c)根据参数ID将获取的参数值进行保存,直至数据包读取完毕,完成对该异构消息的反序列化。
2.根据权利要求1所述的高效自描述的复杂数据对象序列化方法,其特征在于,所述参数二进制格式由用于区分不同参数的key和标记参数值类型的value构成。
【文档编号】G06F17/30GK103778248SQ201410054437
【公开日】2014年5月7日 申请日期:2014年2月18日 优先权日:2014年2月18日
【发明者】黄睿 申请人:成都致云科技有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1