一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种简约的对象传输序列化方法及装置与流程

2022-04-25 02:49:15 来源:中国专利 TAG:


1.本发明涉及java对象传输领域,尤其涉及一种简约的对象传输序列化方法及装置。


背景技术:

2.现有市场上的效率比较高的序列化框架protobuf,thrift,fastjson等,包括jdk自带的序列化。序列化的目的是解决对象在网络上传输问题,其中,发送方会将对象转换为字节序列才能发送,接收方接收到字节序列在反编码为对象,这整个过程就是序列化和反序列化。
3.由于这些框架需要考虑到通用性,会在对象序列化的时候加入各种对象描述,版本描述,属性描述,这样的好处是更加通用也能跨语言,但带来的弊端是序列化后的对象字节空间变大,传输效率变慢,其实在特定的应用场景并不需要太通用的协议。


技术实现要素:

4.为了解决现有框架编码出来的对象字节空间过大,结构内部有过于多余的数据体,反解析也不够干脆,导致java对象传输效率过慢的问题,本发明的目的是提供一种简约的对象传输序列化方法及装置,用于简化java对象序列化传输过程。
5.本发明的技术方案提供一种简约的对象传输序列化方法及装置,方法包括以下步骤:
6.s1:构建简约对象序列化格式,所述简约对象序列化格式包括:序列化类编号、变长字符长度和类属性;其中类属性包括多个;
7.s2:元信息提取,根据序列化类的注解,提前提取序列化类的元信息至内存;内存中存在序列化类的映射表;
8.s3:生成对象字节序列,网络发送方根据序列化类的映射表,反射解析类的信息,生成对象字节序列;
9.s4:对象字节序列解析,网络接收方对收到的对象字节序列进行解析,将对象字节序列反编码为对象。
10.进一步地,步骤s4中,将对象字节序列反编码为对象的具体过程为:获取对象字节序列中,第一个字节内的序列化类编号,根据序列化内类编号,通过内存得到对应类的元数据;按照类属性和元数据,依次解析出类的属性数据,将对象字节序列反编码为对象。
11.进一步地,在解析类的属性数据时,遇到string类的属性变长数据,则通过元数据和字节数组头部数据获取其大小,其他基本类型的属性数据。按照java规范规定的基本类型长度进行读取。
12.一种简约的对象传输序列化装置,装置包括:
13.简约对象序列化格式构建模块:所述简约对象序列化格式包括:序列化类编号、变长字符长度和类属性;其中类属性包括多个;
14.元信息提取模块:根据序列化类的注解,提前提取序列化类的元信息至内存;内存中存在序列化类的映射表;
15.对象字节序列生成模块:网络发送方根据序列化类的映射表,反射解析类的信息,生成对象字节序列;
16.对象字节序列解析模块:网络接收方对收到的对象字节序列进行解析,将对象字节序列反编码为对象。
17.一种计算机设备,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现所述一种简约的对象传输序列化方法的步骤。
18.一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时实现所述一种简约的对象传输序列化方法的步骤。
19.与现有技术相比,本发明的有益效果包括:提升了java对象网络传输效率。
附图说明
20.图1是本发明提供的一种简约的对象传输序列化方法的流程示意图。
具体实施方式
21.为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
22.本发明提供了一种简约的对象传输序列化方法及装置。请参考图1,图1是本发明方法的流程图;方法包括以下步骤:
23.s1:构建简约对象序列化格式,所述简约对象序列化格式包括:序列化类编号、变长字符长度和类属性;其中类属性包括多个;
24.作为一种实施例,请参考下表1,表1是简约对象序列化格式。
25.表1简约对象序列化格式
[0026][0027]
表中,其中域1、2、3指,表示类的不同属性;
[0028]
在本技术实施例中,以“person类”为例进行说明。
[0029]
按照简约对象序列化格式,对“person类”进行定义。为解释说明用,本技术提供部分代码,仅供说明使用。
[0030]“person
[0031]
@sjbclassserial(classno=1)//标识类编号
[0032]
class person{
[0033]
@sjbfieldserial(fieldno=1)//属性序列化中的位置第1部分执行字符串按utf编码暂定3个字节代表一个字符,字符串对应协议变长
[0034]
string name;
[0035]
@sjbfieldserial(fieldno=2)//属性序列化中的位置第2块4byte
[0036]
int age;
[0037]
@sjbfieldserial(fieldno=3)//第3块8byte
[0038]
long birthday;
[0039]
@sjbfieldserial(fieldno=4)
[0040]
string address;
[0041]
@sjbfieldserial(fieldno=5)
[0042]
long creattime;
[0043]
}
[0044]”[0045]
在person类中,第一个部分,即为类的编号;第二个部分,即为变长字符长度,本实施例中执行字符串按utf编码暂定3个字节代表一个字符,字符串对应协议变长;
[0046]
其它部分,依次对应person类的属性值,如在本实施例中,person类包括以下几个属性:name、birthday、address、creattime。
[0047]
s2:元信息提取,根据序列化类的注解,提前提取序列化类的元信息至内存;内存中存在序列化类的映射表;
[0048]
作为一种实施例,类的映射表如表2所示;
[0049]
表2类映射表
[0050]
编号类全路径1com.sjb.entiry.person2com.sjb.entiry.car
……
[0051]
表2中,类编号为1的,即为本实施例中的person类。
[0052]
根据类映射表,进一步的内存中存在类对应属性查找表,如表3:
[0053]
表3类对应属性查找表
[0054][0055]
表2、3中,存有元数据。
[0056]
s3:生成对象字节序列,网络发送方根据序列化类的映射表,反射解析类的信息,生成对象字节序列;
[0057]
作为一种实施例,person类的对象字节序列如下:
[0058]
1|0 6|0 27|-27
ꢀ‑
68
ꢀ‑
96
ꢀ‑
28
ꢀ‑
72
ꢀ‑
119|0 0 0 25|0 0 1 125
ꢀ‑
118
ꢀ‑
89
ꢀ‑
124
ꢀ‑
27|-26
ꢀ‑
83
ꢀ‑
90
ꢀ‑
26
ꢀ‑
79
ꢀ‑
119
ꢀ‑
27
ꢀ‑
72
ꢀ‑
126
ꢀ‑
26
ꢀ‑
76
ꢀ‑
86
ꢀ‑
27
ꢀ‑
79
ꢀ‑
79
ꢀ‑
27
ꢀ‑
116
ꢀ‑
70
ꢀ‑
23
ꢀ‑
121
ꢀ‑
111
ꢀ‑
24
ꢀ‑
98
ꢀ‑
115
ꢀ‑
26
ꢀ‑
72
ꢀ‑
81|0 0 0 4-99 127 27-124
[0059]
这是提取元数据后的结果,对象字节序列作为一串数据,发送至网络接收方;
[0060]
s4:对象字节序列解析,网络接收方对收到的对象字节序列进行解析,将对象字节序列反编码为对象。
[0061]
步骤s4中,将对象字节序列反编码为对象的具体过程为:获取对象字节序列中,第一个字节内的序列化类编号,根据序列化内类编号,通过内存得到对应类的元数据;按照类属性和元数据,依次解析出类的属性数据,将对象字节序列反编码为对象。
[0062]
在解析类的属性数据时,遇到string类的属性变长数据,则通过元数据和字节数组头部数据获取其大小,其他基本类型的属性数据。按照java规范规定的基本类型长度进行读取。
[0063]
根据以上过程,解析即为:
[0064]
1表示类的编号
[0065]
0 6表示第1个字符串属性的长度name
[0066]
0 27表示第2个字符串属性的长度address
[0067]-27
ꢀ‑
68
ꢀ‑
96
ꢀ‑
28
ꢀ‑
72
ꢀ‑
119表示name值
[0068]
0 0 0 25表示age值
[0069]
0 0 1 125
ꢀ‑
118
ꢀ‑
89
ꢀ‑
124
ꢀ‑
27表示birthday值
[0070]-26
ꢀ‑
83
ꢀ‑
90
ꢀ‑
26
ꢀ‑
79
ꢀ‑
119
ꢀ‑
27
ꢀ‑
72
ꢀ‑
126
ꢀ‑
26
ꢀ‑
76
ꢀ‑
86
ꢀ‑
27
ꢀ‑
79
ꢀ‑
79
ꢀ‑
27
ꢀ‑
116
ꢀ‑
70
ꢀ‑
23
ꢀ‑
121
ꢀ‑
111
ꢀ‑
24
ꢀ‑
98
ꢀ‑
115
ꢀ‑
26
ꢀ‑
72
ꢀ‑
81表示address值
[0071]
0 0 0 4
ꢀ‑
99 127 27
ꢀ‑
124表示createtime。
[0072]
一种简约的对象传输序列化装置,装置包括:
[0073]
简约对象序列化格式构建模块:所述简约对象序列化格式包括:序列化类编号、变长字符长度和类属性;其中类属性包括多个;
[0074]
元信息提取模块:根据序列化类的注解,提前提取序列化类的元信息至内存;内存中存在序列化类的映射表;
[0075]
对象字节序列生成模块:网络发送方根据序列化类的映射表,反射解析类的信息,生成对象字节序列;
[0076]
对象字节序列解析模块:网络接收方对收到的对象字节序列进行解析,将对象字节序列反编码为对象。
[0077]
一种计算机设备,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现所述一种简约的对象传输序列化方法的步骤。
[0078]
一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时实现所述一种简约的对象传输序列化方法的步骤。
[0079]
为了更好的说明本发明的有益效果,本发明对比jdk和fastjson两种序列化方法,进行了测试。
[0080]
以persion对象5个属性测试结果对比
[0081]
表4单个对象本地序列化反序列化测试结果
[0082][0083][0084]
表5 100万对象的本地序列化反序列化测试结果
[0085][0086]
表6 1000万对象本地序列化反序列化测试
[0087][0088]
表7网络通讯1w次测试
[0089][0090]
通过测试的整体表现,在单体对象传输简约对象序列化协议占绝对优势。
[0091]
应理解,上述实施例中各步骤的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本技术实施例的实施过程构成任何限定。
[0092]
本发明的有益效果是:提升了java对象网络传输效率。
[0093]
以上所述本发明的具体实施方式,并不构成对本发明保护范围的限定。任何根据本发明的技术构思所做出的各种其他相应的改变与变形,均应包含在本发明权利要求的保护范围内。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献