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

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

Info

Publication number
CN103778248A
CN103778248A CN201410054437.3A CN201410054437A CN103778248A CN 103778248 A CN103778248 A CN 103778248A CN 201410054437 A CN201410054437 A CN 201410054437A CN 103778248 A CN103778248 A CN 103778248A
Authority
CN
China
Prior art keywords
message
parameter
value
type
serializing
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN201410054437.3A
Other languages
English (en)
Other versions
CN103778248B (zh
Inventor
黄睿
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Zhiyun Technology Co.,Ltd.
Original Assignee
CHENGDU ZHIYUN SCIENCE & TECHNOLOGY Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by CHENGDU ZHIYUN SCIENCE & TECHNOLOGY Co Ltd filed Critical CHENGDU ZHIYUN SCIENCE & TECHNOLOGY Co Ltd
Priority to CN201410054437.3A priority Critical patent/CN103778248B/zh
Publication of CN103778248A publication Critical patent/CN103778248A/zh
Application granted granted Critical
Publication of CN103778248B publication Critical patent/CN103778248B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/448Execution paradigms, e.g. implementations of programming paradigms
    • G06F9/4488Object-oriented

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Measuring Or Testing Involving Enzymes Or Micro-Organisms (AREA)
  • Communication Control (AREA)

Abstract

本发明公开了一种高效自描述的复杂数据对象序列化方法,主要解决了现有技术中存在的对象序列化处理能力有限,使用和维护较为不便,缺乏统一和一致性的问题。该方法为每种异构消息创建一个用于标识其类型的唯一消息ID,并创建零个或一个以上用以标识各异构消息所需传递的属性值的参数,创建各参数的唯一ID、值类型和二进制保存的值内容,并根据异构消息的消息ID,采用二进制方式实现序列化和反序列化。通过上述方案,本发明达到了便于管理和维护,减少出错记录,提高数据处理能力的目的,具有很高的实用价值和推广价值。

Description

高效自描述的复杂数据对象序列化方法
技术领域
本发明涉及一种复杂数据对象序列化方法,具体地说,是涉及一种高效自描述的复杂数据对象序列化方法。
背景技术
对象序列化、反序列化是现代网络通讯和远程调用技术的基石,序列化方法将逻辑对象转换为数据包,通过网络发送到远端,远端服务器接收到数据包后,将其反序列化获得原始逻辑对象,再进行解析和处理。
为了提高应用效果,要求序列化方法需达到性能、易用性、可扩展性各方面的平衡。目前业内使用最广泛、评价最高的是谷歌的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)本发明中,无需独立定义文件和解析代码,一个大型系统内只需要维护一份参数值定义文件即可,便于统一管理、减少出错记录,且有效降低了维护难度,大幅度提高了复杂数据处理性能,符合实际需求。
具体实施方式
下面结合附图和实施例对本发明作进一步说明,本发明的实施方式包括但不限于下列实施例。
实施例
为了解决现有技术中存在的对象序列化处理能力有限,使用和维护较为不便,缺乏统一和一致性的问题,本发明公开了一种使用统一方法对各种异构消息进行序列化和反序列化处理,且序列化后的二进制数据流可以自我描述,无需接口文件和独立的编解码代码就可正确反序列化回原始对象、且适用于复杂数据对象的序列化方法。
本发明中,每种异构消息都有一个唯一的消息ID,用来标识异构消息的类型,每个异构消息都包含零到多个参数,用来标识各种异构消息需要传递的属性值,每个参数都有自己的惟一ID、值类型和二进制保存的值内容,通过此种设置,序列化通过以下方式实现:首先将消息ID用二进制方式保存在数据包头,再遍历消息的参数清单,依次将参数序列化成二进制形式追加到数据包,参数全部处理完毕时,序列化完成;相应地,反序列化时,首先读取消息ID,然后依次读取参数类型,根据类型对参数的二进制数据包进行解码,获得参数值,并根据参数ID保存到内存中,数据包全部读取完毕,反序列化完成。
根据不同的数据类型,本实施例中提供了相应的编码规则,如表1所示,常见的四个基本数据存储格式可如下:
表1
Figure 4330DEST_PATH_IMAGE001
本发明中,优选使用二进制编码格式进行各异构消息的序列化、反序列化,各异构消息的二进制编码格式如下:
每个消息都由一个message id(消息ID)开始,使用variant格式保存;message id后面跟随零到多个参数的二进制格式数据;参数二进制格式由key和value组成,key长度为2字节,高11位为param id(参数ID),用于区分不同的参数,支持最多2048个参数;低5位为value type(值类型),标记参数值的类型,最多支持32种数据类型。如表2所示,值类型有多种可选值,可以根据实际情况扩展和自定义:
表2
类型值 类型
0 Int整型
1 Uint 无符号整型
2 Bool 布尔类型
3 String 字符串
4 Float单精度浮点数
5 Int Array整型数组
6 UInt Array 无符号整型数组
7 Float Array浮点数数组
8 String Array 字符串数组
9 Array of UInt Array 无符号整型数组的数组
10 Array of StringArray 字符串数组的数组
11 Array of Float Array 浮点数数组的数组
value是参数值的二进制格式,根据不同的值类型,选择不同的编码方式。
在上述基础上,序列化过程如下:
读取对象message id,使用variant编码写入;遍历对象属性,为每个属性选择合适的参数id,根据参数id和值类型,生成2字节key值,并根据算法:key = param_id << 5|value_type写入;根据值类型和属性值编码value的二进制格式并写入;对于UInt、Bool类型,使用variant编码存储;对于Int类型,先使用ZigZag编码转换后再使用variant编码存储;对于Float类型,使用4字节浮点数存储;对于String类型,获取字符串长度n,将n使用varint编码存储,再写入n字节二进制字符串;对于Array类型,获取数组个数n,将n使用varint编码存储,然后根据基础类型存储规则将n个值连续写入,如:Int Array:[3][int1][int2][int3]、StringArray:[2][string1][string2];对于Array of Array类型,获取母数组个数n,将n使用varint编码存储,然后遍历字数组,根据编码规则将各子数组编码写入,如:Uint Array of Array=[[1,2],[4, 4,3]]编码为:[2]  [2] [1][2] [3] [4][4][3];重复上述步骤,直到所有属性读取完毕,序列化完成。
与之对应地,反序列化过程如下:
读取一个variant值,获得对象message id;读取2字节获得一个key值,根据算法:value_type = key_value&0x1F、param_id = key_value >> 5从中拆分参数id和值类型;根据值类型选择不同的解码方法,读取参数内容,根据参数id和值类型保存到对象的属性;对于Uint、Int、Bool,直接做一个varint解码获得,Int类型对解码后的数字再做一次zigzag解码获得最终结果;对于Float类型,读取4字节解码获得单精度浮点数;对于String类型,先做一次varint解码,获得字符串长度n,再继续读取n字节保存为字符串内容;对于Array类型,先做一次varint解码,获得数组元素个数n,然后根据基础类型方法进行n次解码,获得n个元素,保存到数组中;对于Array of Array类型,先做一次varint解码,获得母数组元素个数n。然后根据3.4的数组解码方法,重复n次,获得n个子数组,保存到母数组;重复步骤上述步骤,直到所有参数读取完毕,反序列化完成。
经验证,对于500个复杂监控消息进行序列化和反序列化处理时,相对于Protocol Buffers处理,本发明的处理速度用时为241毫秒,约为Protocol Buffers处理速度的4.4倍;本发明序列化后的数据包占用了375,346字节,与Protocol Buffers序列化后的占用率相比,节约了31%的容量。
按照上述实施例,便可很好地实现本发明。

Claims (2)

1.高效自描述的复杂数据对象序列化方法,其特征在于,包括:
为每种异构消息创建一个用于标识其类型的唯一消息ID,并创建零个或一个以上用以标识各异构消息所需传递的属性值的参数,创建各参数的唯一ID、值类型和二进制保存的值内容;
序列化时:
(1)将待序列化异构消息的消息ID用二进制方式保存在数据包头;
(2)遍历异构消息的参数清单,依次将该异构消息的参数序列化为二进制格式追加至存储有消息ID的数据包,直至所有参数处理完毕,完成对该异构消息的序列化;
反序列化时:
(a)读取待反序列化的异构消息的消息ID;
(b)依次读取该异构消息的参数类型,根据类型对参数的二进制数据包进行解码,获得参数值;
(c)根据参数ID将获取的参数值进行保存,直至数据包读取完毕,完成对该异构消息的反序列化。
2.根据权利要求1所述的高效自描述的复杂数据对象序列化方法,其特征在于,所述参数二进制格式由用于区分不同参数的key和标记参数值类型的value构成。
CN201410054437.3A 2014-02-18 2014-02-18 高效自描述的复杂数据对象序列化方法 Active CN103778248B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201410054437.3A CN103778248B (zh) 2014-02-18 2014-02-18 高效自描述的复杂数据对象序列化方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201410054437.3A CN103778248B (zh) 2014-02-18 2014-02-18 高效自描述的复杂数据对象序列化方法

Publications (2)

Publication Number Publication Date
CN103778248A true CN103778248A (zh) 2014-05-07
CN103778248B CN103778248B (zh) 2017-07-11

Family

ID=50570483

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201410054437.3A Active CN103778248B (zh) 2014-02-18 2014-02-18 高效自描述的复杂数据对象序列化方法

Country Status (1)

Country Link
CN (1) CN103778248B (zh)

Cited By (19)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104486396A (zh) * 2014-12-10 2015-04-01 中国电信集团系统集成有限责任公司 一种跨平台的网络数据的传输方法
CN106155630A (zh) * 2015-04-14 2016-11-23 阿里巴巴集团控股有限公司 序列化方法、反序列化方法、序列化装置及反序列化装置
CN106294385A (zh) * 2015-05-19 2017-01-04 阿里巴巴集团控股有限公司 数据对象序列化和反序列化数据对象的方法及装置
CN106777292A (zh) * 2016-12-29 2017-05-31 北京神州绿盟信息安全科技股份有限公司 一种数据序列化方法及装置
CN106843819A (zh) * 2015-12-03 2017-06-13 北京国双科技有限公司 对象序列化的方法及装置
CN107231443A (zh) * 2017-08-10 2017-10-03 深圳市中青合创传媒科技有限公司 一种应用程序高并发高负荷处理方法和系统
CN107729355A (zh) * 2017-08-31 2018-02-23 上海金大师网络科技有限公司 一种基于数据储存类型TVariant的数据存储方法及其装置
CN107948181A (zh) * 2017-12-06 2018-04-20 吉旗(成都)科技有限公司 一种可扩展的数据字描述结构方法
CN109117209A (zh) * 2018-07-23 2019-01-01 广州多益网络股份有限公司 序列化和反序列化方法及装置
CN110287190A (zh) * 2019-06-25 2019-09-27 四川深度在线广告传媒有限公司 一种大数据分析自定义编码储存结构及编码、解码方法
CN110855727A (zh) * 2018-08-21 2020-02-28 苏州迈科网络安全技术股份有限公司 基于字节序列化和反序列化的数据对象的传输系统和方法
CN111343612A (zh) * 2020-02-20 2020-06-26 杭州涂鸦信息技术有限公司 一种物联网数据方法及系统
CN111414384A (zh) * 2020-02-26 2020-07-14 有米科技股份有限公司 海量流式数据的处理方法及装置
CN111478898A (zh) * 2020-04-03 2020-07-31 爱瑟福信息科技(上海)有限公司 Someip协议通信数据的序列化和反序列化方法及其系统
CN111953653A (zh) * 2020-07-07 2020-11-17 上海金仕达软件科技有限公司 数据传输方法、系统及装置
CN112260699A (zh) * 2020-09-15 2021-01-22 深圳拓邦股份有限公司 属性通讯编解码方法、编码装置、解码装置及系统
CN114401321A (zh) * 2021-12-31 2022-04-26 中国电力科学研究院有限公司 宽频测量数据轻量化传输方法、系统、设备及存储介质
CN115314536A (zh) * 2022-08-03 2022-11-08 平安付科技服务有限公司 远程执行命令方法及装置、存储介质、计算机设备
CN112260699B (zh) * 2020-09-15 2024-06-28 深圳拓邦股份有限公司 属性通讯编解码方法、编码装置、解码装置及系统

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102043657A (zh) * 2011-02-01 2011-05-04 苏州同元软控信息技术有限公司 物理建模语言Modelica的模型库文件序列化方法
US20130117326A1 (en) * 2011-11-08 2013-05-09 Microsoft Corporation External serialization and deserialization

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102043657A (zh) * 2011-02-01 2011-05-04 苏州同元软控信息技术有限公司 物理建模语言Modelica的模型库文件序列化方法
US20130117326A1 (en) * 2011-11-08 2013-05-09 Microsoft Corporation External serialization and deserialization

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
高立群等: ".NET Framework中序列化与反序列化方法的分析与应用", 《中国期刊全文数据库 微计算机应用》 *

Cited By (26)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104486396B (zh) * 2014-12-10 2017-12-26 中国电信集团系统集成有限责任公司 一种跨平台的网络数据的传输方法
CN104486396A (zh) * 2014-12-10 2015-04-01 中国电信集团系统集成有限责任公司 一种跨平台的网络数据的传输方法
CN106155630A (zh) * 2015-04-14 2016-11-23 阿里巴巴集团控股有限公司 序列化方法、反序列化方法、序列化装置及反序列化装置
CN106294385A (zh) * 2015-05-19 2017-01-04 阿里巴巴集团控股有限公司 数据对象序列化和反序列化数据对象的方法及装置
CN106843819A (zh) * 2015-12-03 2017-06-13 北京国双科技有限公司 对象序列化的方法及装置
CN106777292A (zh) * 2016-12-29 2017-05-31 北京神州绿盟信息安全科技股份有限公司 一种数据序列化方法及装置
CN106777292B (zh) * 2016-12-29 2019-11-15 北京神州绿盟信息安全科技股份有限公司 一种数据序列化方法及装置
CN107231443A (zh) * 2017-08-10 2017-10-03 深圳市中青合创传媒科技有限公司 一种应用程序高并发高负荷处理方法和系统
CN107729355A (zh) * 2017-08-31 2018-02-23 上海金大师网络科技有限公司 一种基于数据储存类型TVariant的数据存储方法及其装置
CN107729355B (zh) * 2017-08-31 2020-12-29 上海金大师网络科技有限公司 一种基于数据储存类型TVariant的数据存储方法及其装置
CN107948181A (zh) * 2017-12-06 2018-04-20 吉旗(成都)科技有限公司 一种可扩展的数据字描述结构方法
CN109117209A (zh) * 2018-07-23 2019-01-01 广州多益网络股份有限公司 序列化和反序列化方法及装置
CN109117209B (zh) * 2018-07-23 2021-10-01 广州多益网络股份有限公司 序列化和反序列化方法及装置
CN110855727A (zh) * 2018-08-21 2020-02-28 苏州迈科网络安全技术股份有限公司 基于字节序列化和反序列化的数据对象的传输系统和方法
CN110287190A (zh) * 2019-06-25 2019-09-27 四川深度在线广告传媒有限公司 一种大数据分析自定义编码储存结构及编码、解码方法
CN111343612A (zh) * 2020-02-20 2020-06-26 杭州涂鸦信息技术有限公司 一种物联网数据方法及系统
CN111343612B (zh) * 2020-02-20 2023-09-22 杭州涂鸦信息技术有限公司 一种物联网数据方法及系统
CN111414384A (zh) * 2020-02-26 2020-07-14 有米科技股份有限公司 海量流式数据的处理方法及装置
CN111478898A (zh) * 2020-04-03 2020-07-31 爱瑟福信息科技(上海)有限公司 Someip协议通信数据的序列化和反序列化方法及其系统
CN111478898B (zh) * 2020-04-03 2022-03-11 爱瑟福信息科技(上海)有限公司 Someip协议通信数据的序列化和反序列化方法及其系统
CN111953653A (zh) * 2020-07-07 2020-11-17 上海金仕达软件科技有限公司 数据传输方法、系统及装置
CN112260699A (zh) * 2020-09-15 2021-01-22 深圳拓邦股份有限公司 属性通讯编解码方法、编码装置、解码装置及系统
CN112260699B (zh) * 2020-09-15 2024-06-28 深圳拓邦股份有限公司 属性通讯编解码方法、编码装置、解码装置及系统
CN114401321A (zh) * 2021-12-31 2022-04-26 中国电力科学研究院有限公司 宽频测量数据轻量化传输方法、系统、设备及存储介质
CN115314536A (zh) * 2022-08-03 2022-11-08 平安付科技服务有限公司 远程执行命令方法及装置、存储介质、计算机设备
CN115314536B (zh) * 2022-08-03 2024-02-02 平安付科技服务有限公司 远程执行命令方法及装置、存储介质、计算机设备

Also Published As

Publication number Publication date
CN103778248B (zh) 2017-07-11

Similar Documents

Publication Publication Date Title
CN103778248A (zh) 高效自描述的复杂数据对象序列化方法
CN103400174B (zh) 一种二维码的编码方法、解码方法及系统
CN105684316A (zh) 一种Polar码编码方法、装置
CN102970043B (zh) 一种基于gzip的压缩硬件系统及其加速方法
CN103250463A (zh) 用于通信系统的子集编码
US10977221B2 (en) Encoding of data formatted in human-readable text according to schema into binary
US20200007158A1 (en) System and method for data storage, transfer, synchronication, and security using codeword probaility estimation
CN102075430B (zh) 深度报文检测dfa状态转移表的压缩与报文匹配方法
CN101584120A (zh) 表装置、可变长度编码装置、可变长度解码装置以及可变长度编码解码装置
CN106067824B (zh) 一种基于二联密码子的测序数据压缩方法
CN106549673A (zh) 一种数据压缩方法及装置
CN110990358B (zh) 一种解压缩方法、电子设备及计算机可读存储介质
CN116506073A (zh) 一种工业计算机平台数据快速传输方法及系统
CN103209119A (zh) 一种低功耗嵌入式云智能网关
CN103297183B (zh) 数据通信方法及装置
CN110830164A (zh) 一种用于物联网设备通信的数据序列化方法
CN103220260B (zh) 更新数据的方法、服务器、客户端及系统
CN103399827B (zh) 存储装置、执行访问操作的系统和方法
CN116760661A (zh) 数据存储方法、装置、计算机设备、存储介质和程序产品
CN108829930B (zh) 三维数字化工艺设计mbd模型的轻量化方法
CN202931290U (zh) 一种基于gzip的压缩硬件系统
CN109150397B (zh) 一种构造极化码序列的方法及装置
CN115906966A (zh) 一种针对大规模脑仿真的快速通信方法
CN115604365A (zh) 数据编解码方法、装置、电子设备及可读存储介质
CN105490683B (zh) 保存范式哈夫曼树的方法及装置

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant
TR01 Transfer of patent right
TR01 Transfer of patent right

Effective date of registration: 20171204

Address after: 610017 8 building, No. 219, Tianfu Third Street, Sichuan high tech Zone, Chengdu high tech Zone

Patentee after: Chengdu Chi Chi Technology Co., Ltd.

Address before: 610000 Chengdu province high tech Zone, East Street, No. 76, grass layer, layer 4, No.

Patentee before: CHENGDU ZHIYUN SCIENCE & TECHNOLOGY CO., LTD.

TR01 Transfer of patent right
TR01 Transfer of patent right

Effective date of registration: 20210323

Address after: 4 / F, block B, building 5, No. 200, Tianfu 5th Street, high tech Zone, Chengdu, Sichuan 610000

Patentee after: Zhiyun Technology Co.,Ltd.

Address before: 8 / F, building 2, no.219, Tianfu Third Street, high tech Zone, Chengdu, Sichuan 610017

Patentee before: Chengdu Chi Chi Technology Co.,Ltd.