基于注解的数据反序列化以及序列化方法与流程
未命名
07-12
阅读:83
评论:0

1.本技术涉及计算机技术领域,尤其涉及一种基于注解的数据反序列化以及序列化方法。
背景技术:
2.当两个网络应用进程进行socket通信时,数据都会以二进制序列的形式在网络上传输,但当另一个进程并不是java进程时,则无法通过java原生方法进行序列化、反序列化操作。当前java进程传统的操作方法是:对于发送的数据,通过定义一个字节数组并将java对象中的属性值按照java类型逐个序列化后,添加到字节数组中;对于接收的数据,则按照协议格式读取字节数组内容后将对应属性值反序列化,然后将属性值注入到java对象中。对于有很多通信需求的数据操作,这样的处理方式使得代码高度重复、冗余,且开发工作量增大。
技术实现要素:
3.本技术实施例的主要目的在于提出一种基于注解的数据反序列化方法以及序列化方法,能够自动完成反序列化以及序列化处理,并减少对通信数据的重复处理工作量。
4.为实现上述目的,本技术实施例的第一方面提出了一种基于注解的数据反序列化方法,所述方法包括:
5.获取序列化数据以及所述序列化数据对应的消息类型信息;
6.通过预定义的第一注解根据所述消息类型信息获取所述序列化数据对应的目标对象;
7.通过所述目标对象中每个目标属性预定义的第二注解对所述序列化数据进行反序列化处理,得到每个所述目标属性被赋值后的所述目标对象;
8.其中,所述第二注解用于获取每个所述目标属性对应的反序列化实例,以通过所述反序列化实例对所述序列化数据进行反序列化处理。
9.根据本技术一些实施例提供的基于注解的数据反序列化方法,所述通过所述目标对象中每个目标属性预定义的第二注解对所述序列化数据进行反序列化处理,得到每个所述目标属性被赋值后的所述目标对象,包括:
10.利用反射机制获取所述目标对象中的每个目标属性以及每个所述目标属性对应的第二注解;
11.对于每个所述目标属性,通过所述第二注解获取所述目标属性对应的反序列化实例,以通过所述反序列化实例对所述序列化数据进行反序列化处理;
12.根据反序列化处理结果对所述目标属性进行赋值,得到每个所述目标属性被赋值后的所述目标对象。
13.根据本技术一些实施例提供的基于注解的数据反序列化方法,所述获取序列化数据以及所述序列化数据对应的消息类型信息,包括:
14.响应于接收到传输数据,通过输入流方式从所述传输数据中读取第一预设字节长度的数据,得到目标信息;
15.若所述目标信息与预定义的消息起始标识符相同,则继续从所述传输数据中读取第二预设字节长度以及第三预设字节长度的数据,分别得到消息类型信息和消息长度信息,并根据所述消息长度信息继续从所述传输数据中读取得到序列化数据。
16.根据本技术一些实施例提供的基于注解的数据反序列化方法,在所述响应于接收到传输数据,通过输入流方式从所述传输数据中读取第一预设字节长度的数据,得到目标信息之后,所述方法还包括:
17.若所述目标信息与预定义的消息起始标识符不相同,则继续从所述传输数据中读取所述第一预设字节长度的数据,直至所述目标信息与预定义的消息起始标识符相同。
18.为实现上述目的,本技术实施例的第二方面提出了一种基于注解的数据序列化方法,所述方法包括:
19.获取待序列化对象;
20.通过所述待序列化对象中每个待序列化属性预定义的注解对所述待序列化对象进行序列化处理,得到所述待序列化对象对应的序列化数据;
21.其中,所述注解用于获取每个所述待序列化属性对应的序列化实例,以通过所述序列化实例对所述待序列化对象进行序列化处理。
22.根据本技术一些实施例提供的基于注解的数据序列化方法,所述通过所述待序列化对象中每个待序列化属性预定义的注解对所述待序列化对象进行序列化处理,得到所述待序列化对象对应的序列化数据,包括:
23.利用反射机制获取所述待序列化对象中每个待序列化属性对应的属性值以及所述待序列化属性对应的注解;
24.对于每个待序列化属性,通过所述注解获取所述待序列化属性对应的序列化实例,以通过所述序列化实例对所述属性值进行序列化处理;
25.根据序列化处理结果得到所述待序列化对象对应的序列化数据。
26.为实现上述目的,本技术实施例的第三方面提出了一种基于注解的数据反序列化装置,所述装置包括:
27.数据获取模块,用于获取序列化数据以及所述序列化数据对应的消息类型信息;
28.目标对象获取模块,用于通过预定义的第一注解根据所述消息类型信息获取所述序列化数据对应的目标对象;
29.反序列化模块,用于通过所述目标对象中每个目标属性预定义的第二注解对所述序列化数据进行反序列化处理,得到每个所述目标属性被赋值后的所述目标对象;
30.其中,所述第二注解用于获取每个所述目标属性对应的反序列化实例,以通过所述反序列化实例对所述序列化数据进行反序列化处理。
31.为实现上述目的,本技术实施例的第三方面提出了一种基于注解的数据序列化装置,所述装置包括:
32.待序列化对象获取模块,用于获取待序列化对象;
33.序列化模块,用于通过所述待序列化对象中每个待序列化属性预定义的注解对所述待序列化对象进行序列化处理,得到所述待序列化对象对应的序列化数据;
34.其中,所述注解用于获取每个所述待序列化属性对应的序列化实例,以通过所述序列化实例对所述待序列化对象进行序列化处理。
35.为实现上述目的,本技术实施例的第五方面提出了一种电子设备,所述电子设备包括存储器、处理器、存储在所述存储器上并可在所述处理器上运行的计算机程序,所述计算机程序被所述处理器执行时实现上述第一方面或第二方面所述的方法。
36.为实现上述目的,本技术实施例的第六方面提出了一种存储介质,所述存储介质为计算机可读存储介质,用于计算机可读存储,所述存储介质存储有一个或者多个计算机程序,所述一个或者多个计算机程序可被一个或者多个处理器执行,以实现上述第一方面或第二方面所述的方法。
37.本技术提出一种基于注解的数据反序列化方法、数据序列化方法、数据反序列化装置、数据序列化装置、电子设备以及计算机可读存储介质,该基于注解的数据反序列化方法首先获取序列化数据以及序列化数据对应的消息类型信息,之后通过预定义的第一注解根据消息类型信息获取序列化数据对应的目标对象,从而通过目标对象中每个目标属性预定义的第二注解对序列化数据进行反序列化处理,得到每个目标属性被赋值后的所述目标对象;其中,第二注解用于获取每个目标属性对应的反序列化实例,以通过反序列化实例对序列化数据进行反序列化处理。基于注解的数据序列化方法包括获取待序列化对象,之后通过待序列化对象中每个待序列化属性预定义的注解对待序列化对象进行序列化处理,得到待序列化对象对应的序列化数据;其中,注解用于获取每个待序列化属性对应的序列化实例,以通过序列化实例对待序列化对象进行序列化处理。本技术实施例在通信数据处理的过程中,调用预定义注解上定义的不同对象属性类型对应的反序列化方法以及序列化方法,自动完成目标对象的反序列化以及待序列化对象的序列化处理,减少对通信数据的重复处理工作量。
附图说明
38.图1是本技术实施例提供的一种基于注解的数据反序列化方法的流程示意图;
39.图2是本技术另一实施例提供的一种基于注解的数据反序列化方法的流程示意图;
40.图3是本技术另一实施例提供的一种基于注解的数据反序列化方法的流程示意图;
41.图4是本技术实施例提供的一种基于注解的数据序列化方法的流程示意图;
42.图5是本技术另一实施例提供的一种基于注解的数据序列化方法的流程示意图;
43.图6是本技术实施例提供的一种基于注解的数据反序列化装置的结构示意图;
44.图7是本技术实施例提供的一种基于注解的数据序列化装置的结构示意图;
45.图8是本技术实施例提供的一种电子设备的结构示意图。
具体实施方式
46.为了使本技术的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本技术进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本技术,并不用于限定本技术。
47.应了解,在本技术实施例的描述中,如果有描述到“第一”、“第二”等只是用于区分技术特征为目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量或者隐含指明所指示的技术特征的先后关系。“至少一个”是指一个或者多个,“多个”是指两个或两个以上。“和/或”,描述关联对象的关联关系,表示可以存在三种关系,例如,a和/或b,可以表示单独存在a、同时存在a和b、单独存在b的情况。其中a,b可以是单数或者复数。字符“/”一般表示前后关联对象是一种“或”的关系。“以下至少一项”及其类似表达,是指的这些项中的任意组,包括单项或复数项的任意组。例如,a、b和c中的至少一项可以表示:a,b,c,a和b,a和c,b和c,或者,a和b和c,其中a,b,c可以是单个,也可以是多个。
48.当两个网络应用进程进行socket通信时,数据都会以二进制序列的形式在网络上传输,但当另一个进程并不是java进程时,则无法通过java原生方法进行序列化、反序列化操作。当前java进程传统的操作方法是:对于发送的数据,通过定义一个字节数组并将java对象中的属性值按照java类型逐个序列化后,添加到字节数组中;对于接收的数据,则按照协议格式读取字节数组内容后将对应属性值反序列化,然后将属性值注入到java对象中。对于有很多通信需求的数据操作,这样的处理方式使得代码高度重复、冗余,且开发工作量增大。
49.基于此,本技术实施例提出一种基于注解的数据反序列化以及序列化方法,能够自动完成反序列化以及序列化处理,并减少对通信数据的重复处理工作量。
50.以java编程语言为例,描述本技术提供的基于注解的数据反序列化方法以及序列化方法,首先对本技术中涉及的若干名词进行解析:
51.java注解(annotation):又称java标注,是jdk5.0引入的一种注释机制。java语言中的类、方法、变量、参数和包等都可以被标注。和javadoc不同,java标注可以通过反射获取标注内容。在编译器生成类文件时,标注可以被嵌入到字节码中。java虚拟机可以保留标注内容,在运行时可以获取到标注内容,当然它也支持自定义java标注,因此我们可以借助java注解方便的对java的类、变量等进行操作。
52.java序列化以及反序列化:当两个应用程序进程在进行远程通信时,可以发送多种数据,包括文本、图片、音频、视频等,这些数据都是以二进制序列的形式在网络上传输。java是面向对象的开发方式,一切都是java对象,想要在网络中传输java对象,可以使用序列化(serialization)和反序列化(deserialization)去实现,java序列化就是指把java对象转换为字节序列的过程,而java反序列化就是指把字节序列恢复为java对象的过程。发送方发送数据时需要将java对象转换为字节序列,字节序列在网络上传送,接收方收到字符序列后,会通过反序列化将字节序列恢复成java对象。
53.套接字(socket):可以看成是两个应用程序进行通信时,各自通信连接中的端点,它是网络环境中进程间通信的应用程序编程接口,也是可以被命名和寻址的通信端点,使用中的每一个套接字都有其类型和一个与之相连进程。通信时其中一个网络应用程序将要传输的一段信息写入它所在主机的socket中,该socket通过与网络接口卡(nic)相连的传输介质将这段信息送到另外一台主机的socket中,使对方能够接收到这段信息。socket是由ip地址和端口结合的,提供向应用层进程传送数据包的机制。
54.请参见图1,图1示出了本技术实施例提供的一种基于注解的数据反序列化方法的流程示意图,如图1所示,所述基于注解的数据反序列化方法包括但不限于步骤s110至步骤
s130:
55.步骤s110,获取序列化数据以及所述序列化数据对应的消息类型信息。
56.可以理解的是,当java进程在收到socket传输的二进制数据后,通过输入流的方式读取数据以获取序列化数据以及该序列化数据对应的消息类型信息。
57.在一些实施例中,请参见图3,图3示出了本技术另一实施例提供的一种基于注解的数据反序列化方法的流程示意图,如图3所示,所述获取序列化数据以及所述序列化数据对应的消息类型信息,包括但不限于步骤s310和步骤s320:
58.步骤s310,响应于接收到传输数据,通过输入流方式从所述传输数据中读取第一预设字节长度的数据,得到目标信息;
59.步骤s320,若所述目标信息与预定义的消息起始标识符相同,则继续从所述传输数据中读取第二预设字节长度以及第三预设字节长度的数据,分别得到消息类型信息和消息长度信息,并根据所述消息长度信息继续从所述传输数据中读取得到序列化数据。
60.可以理解的是,为了更好的适应不同socket通信协议类型(tcp、udp等),在消息抽象类中预定义了消息起始标识符号、消息类型、消息体长度等字段,可准确获取一次消息二进制序列的完整内容。java进程在接收到socket通信数据时,依据协议定义的消息起始标识和消息长度进行字节数组截取,获取得到完整消息的字节数组。
61.示例性的,消息起始标识符预定义为4个字节长度,消息类型为2个字节长度,消息长度为2个字节长度。当java进行在收到socket传输的二进制数据后,以输入流的方式读取,通过定义一个字节队列,用于保存连续读取4个字节长度的数据,得到目标信息,从而判断该目标信息是否与预定义的消息起始标识符(如0xa2b4c6d8)相同,如果相同则往后读取2个字节获取消息类型信息,再往后读取2个字节获取消息长度信息,之后根据消息长度信息读取相应字节获取得到以字节数组保存的序列化数据。
62.应能理解的是,为了方便使用socket通信数据,可以将保存有序列化数据的字节数组转换为字节缓冲区,之后再进行反序列化操作。
63.在一些实施例中,如图3所示,在所述响应于接收到传输数据,通过输入流方式从所述传输数据中读取第一预设字节长度的数据,得到目标信息之后,所述方法还包括步骤s330:
64.步骤s330,若所述目标信息与预定义的消息起始标识符不相同,则继续从所述传输数据中读取所述第一预设字节长度的数据,直至所述目标信息与预定义的消息起始标识符相同。
65.需要说明的是,当目标信息与预定义的消息起始标识符不相同时,表明此时的读取位置不是一个完整序列化数据的开始,因此,继续从输入流数据中读取第一预设字节长度的数据,直至确定一个完整序列化数据的开始位置。
66.步骤s120,通过预定义的第一注解根据所述消息类型信息获取所述序列化数据对应的目标对象。
67.可以理解的是,预定义的第一注解用于标识java对象类型。示例性的,第一注解表示为@msgtype,@msgtype注解定义在java类上,用于反序列化时获取对应的java对象,其中,msgtype接口里的成员变量及其说明如表1所示。
[0068][0069]
表1
[0070]
步骤s130,通过所述目标对象中每个目标属性预定义的第二注解对所述序列化数据进行反序列化处理,得到每个所述目标属性被赋值后的所述目标对象。
[0071]
其中,所述第二注解用于获取每个所述目标属性对应的反序列化实例,以通过所述反序列化实例对所述序列化数据进行反序列化处理。
[0072]
需要说明的是,不同java属性类型对应有各自的第二注解,而该第二注解上定义有不同java属性类型的反序列化方法,从而能够通过第二注解自动完成java对象的反序列化。示例性的,第二注解表示为@fieldproperty,@fieldproperty注解定义在java对象属性上,用于对java对象属性的操作,fieldproperty接口里面的成员变量及其说明如表2所示。
[0073][0074]
表2
[0075]
在一个具体实施例中,@fieldproperty注解标识对象属性的使用示例如下:
[0076]
@fieldproperty(fieldtype=columntype.int)
[0077]
public int id;
[0078]
枚举类fieldtype定义属性类型、序列化、反序列化方法的使用示例如下:
[0079][0080][0081]
在一些实施例中,请参见图2,图2示出了本技术另一实施例提供的一种基于注解的数据反序列化方法的流程示意图,如图2所示,所述通过所述目标对象中每个目标属性预定义的第二注解对所述序列化数据进行反序列化处理,得到每个所述目标属性被赋值后的所述目标对象,包括但不限于步骤s210至s230:
[0082]
步骤s210,利用反射机制获取所述目标对象中的每个目标属性以及每个所述目标属性对应的第二注解;
[0083]
步骤s220,对于每个所述目标属性,通过所述第二注解获取所述目标属性对应的反序列化实例,以通过所述反序列化实例对所述序列化数据进行反序列化处理;
[0084]
步骤s230,根据反序列化处理结果对所述目标属性进行赋值,得到每个所述目标属性被赋值后的所述目标对象。
[0085]
应了解,通过java反射机制根据消息类型信息获取该java对象的属性,之后循环对所有的java对象属性进行操作,示例性的,通过每个属性对应的第二注解@fieldproperty获取对应的枚举字段类型fieldtype,继而调用fieldtype中的反序列化方法完成对序列化数据的反序列化处理。
[0086]
本技术提出一种基于注解的数据反序列化方法,该方法首先获取序列化数据以及序列化数据对应的消息类型信息,之后通过预定义的第一注解根据消息类型信息获取序列化数据对应的目标对象,从而通过目标对象中每个目标属性预定义的第二注解对序列化数
据进行反序列化处理,得到每个目标属性被赋值后的所述目标对象,其中,第二注解用于获取每个目标属性对应的反序列化实例,以通过反序列化实例对序列化数据进行反序列化处理。本技术实施例在通信数据处理的过程中,调用预定义注解上定义的不同对象属性类型对应的反序列化方法,自动完成目标对象的反序列化,减少对通信数据的重复处理工作量。
[0087]
请参见图4,图4示出了本技术实施例提供的一种基于注解的数据序列化方法的流程示意图,如图4所示,所述基于注解的数据序列化方法包括但不限于步骤s410和步骤s420:
[0088]
步骤s410,获取待序列化对象;
[0089]
步骤s420,通过所述待序列化对象中每个待序列化属性预定义的注解对所述待序列化对象进行序列化处理,得到所述待序列化对象对应的序列化数据;
[0090]
其中,所述注解用于获取每个所述待序列化属性对应的序列化实例,以通过所述序列化实例对所述待序列化对象进行序列化处理。
[0091]
示例性的,预定义有message抽象类,其成员变量及其说明如表3所示,首先实例化一个继承message父类的java对象,调用message里面的序列化方法serialize()。在message的序列化方法中,通过待序列化对象中每个属性预定义的注解对该对象进行序列化处理。
[0092][0093][0094]
表3
[0095]
在一些实施例中,请参见图5,图5示出了本技术另一实施例提供的一种基于注解的数据序列化方法的流程示意图,如图5所示,所述通过所述待序列化对象中每个待序列化属性预定义的注解对所述待序列化对象进行序列化处理,得到所述待序列化对象对应的序列化数据,包括但不限于步骤s510至步骤s530:
[0096]
步骤s510,利用反射机制获取所述待序列化对象中每个待序列化属性对应的属性值以及所述待序列化属性对应的注解;
[0097]
步骤s520,对于每个待序列化属性,通过所述注解获取所述待序列化属性对应的序列化实例,以通过所述序列化实例对所述属性值进行序列化处理;
[0098]
步骤s530,根据序列化处理结果得到所述待序列化对象对应的序列化数据。
[0099]
可以理解的是,利用java反射机制获取java对象的所有属性以及其对应的注解,循环对java对象属性进行操作,示例性的,通过每个属性对应的注解@fieldproperty获取对应的枚举字段类型fieldtype,继而调用fieldtype中的序列化方法完成对java对象中属性值的序列化处理。
[0100]
本技术提出一种基于注解的数据序列化方法,所述方法包括获取待序列化对象,之后通过待序列化对象中每个待序列化属性预定义的注解对待序列化对象进行序列化处
理,得到待序列化对象对应的序列化数据;其中,注解用于获取每个待序列化属性对应的序列化实例,以通过序列化实例对待序列化对象进行序列化处理。本技术实施例在通信数据处理的过程中,调用预定义注解上定义的不同对象属性类型对应的序列化方法,自动完成待序列化对象的序列化,减少对通信数据的重复处理工作量。
[0101]
下面通过一个具体实施例描述本技术提供的基于注解的数据序列化方法以及反序列化方法:
[0102]
预定义注解@fieldproperty用于标识java对象属性,预定义注解@msgtype用于标识java对象类型,预定义抽象父类message用于提供序列化反序列化方法,其中,注解
[0103]
@fieldproperty、注解@msgtype以及抽象父类message的成员变量及其说明书参见上述表1至表3。
[0104]
对于消息发送方,消息接收方首先实例化一个继承message父类的java对象,调用message里的序列化方法serialize()。message的序列化方法里,通过java反射机制,获取java对象的所有属性。针对各个java对象属性,通过每个属性的注解@fiedlproperty获取对应的枚举字段类型fieldtype,调用fieldtype的serialize()方法完成属性值的序列化,之后消息发送方将该java对象对应的序列化数据通过socket传输至消息接收方。
[0105]
对于消息接收方,消息接收方的java进程在收到socket传输的序列化数据后,通过输入流的方式读取,通过定义字节队列,用于保存连续读取4个字节长度的数据,得到目标信息,从而判断该目标信息是否与预定义的消息起始标识符(如0xa2b4c6d8)相同,如果相同则往后读取2个字节获取消息类型信息,再往后读取2个字节获取消息长度信息,之后根据消息长度信息读取相应字节获取得到以字节数组保存的序列化数据。
[0106]
之后通过@msgtype注解根据消息类型信息获取到具体的java对象,调用该java对象父类方法message里的反序列方法serialize(),参数为获取的字节数组。在该反序列方法中,通过java反射机制根据消息类型信息获取该java对象的属性。针对各个java对象属性,通过每个属性的注解@fiedlproperty获取对应的枚举字段类型fieldtype,调用fieldtype的deserialize()方法完成反序列化。
[0107]
本技术实施例通过对java预定义的注解,在对socket通信数据进行处理时,调用预定义注解上定义的不同java属性类型对应的序列化和反序列化方法,自动完成java对象的序列化和反序列化,减少了java进程对socket通信数据的重复处理工作量。
[0108]
请参见图6,本技术实施例还提供了一种基于注解的数据反序列化装置100,所述装置包括:
[0109]
数据获取模块110,用于获取序列化数据以及所述序列化数据对应的消息类型信息;
[0110]
目标对象获取模块120,用于通过预定义的第一注解根据所述消息类型信息获取所述序列化数据对应的目标对象;
[0111]
反序列化模块130,用于通过所述目标对象中每个目标属性预定义的第二注解对所述序列化数据进行反序列化处理,得到每个所述目标属性被赋值后的所述目标对象;
[0112]
其中,所述第二注解用于获取每个所述目标属性对应的反序列化实例,以通过所述反序列化实例对所述序列化数据进行反序列化处理。
[0113]
请参见图7,本技术实施例还提供了一种基于注解的数据序列化装置200,所述装
置包括:
[0114]
待序列化对象获取模块210,用于获取待序列化对象;
[0115]
序列化模块220,用于通过所述待序列化对象中每个待序列化属性预定义的注解对所述待序列化对象进行序列化处理,得到所述待序列化对象对应的序列化数据;
[0116]
其中,所述注解用于获取每个所述待序列化属性对应的序列化实例,以通过所述序列化实例对所述待序列化对象进行序列化处理。
[0117]
需要说明的是,上述装置的模块之间的信息交互、执行过程等内容,由于与本技术方法实施例基于同一构思,其具体功能及带来的技术效果,具体可参见方法实施例部分,此处不再赘述。
[0118]
请参见图8,图8示出本技术实施例提供的一种电子设备的硬件结构,电子设备300的内部结构包括但不限于:
[0119]
存储器310,用于存储程序;
[0120]
处理器320,用于执行存储器310存储的程序,当处理器320执行存储器310存储的程序时,处理器320用于执行上述的基于注解的数据反序列化方法或者序列化方法。
[0121]
处理器320和存储器310可以通过总线或者其他方式连接。
[0122]
存储器310作为一种非暂态计算机可读存储介质,可用于存储非暂态软件程序以及非暂态性计算机可执行程序,如本发明任意实施例描述的基于注解的数据反序列化方法或者序列化方法。处理器320通过运行存储在存储器310中的非暂态软件程序以及指令,从而实现上述的基于注解的数据反序列化方法或者序列化方法。
[0123]
存储器310可以包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需要的应用程序;存储数据区可存储执行上述的基于注解的数据反序列化方法或者序列化方法。此外,存储器310可以包括高速随机存取存储器,还可以包括非暂态存储器,比如至少一个磁盘存储器件、闪存器件、或其他非暂态固态存储器件。在一些实施方式中,存储器310可选包括相对于处理器320远程设置的存储器,这些远程存储器可以通过网络连接至该处理器320。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
[0124]
实现上述的基于注解的数据反序列化方法或者序列化方法所需的非暂态软件程序以及指令存储在存储器310中,当被一个或者多个处理器320执行时,执行本发明任意实施例提供的基于注解的数据反序列化方法或者序列化方法。
[0125]
本技术实施例还提供了一种计算机可读存储介质,存储有计算机可执行指令,计算机可执行指令用于执行上述的基于注解的数据反序列化方法或者序列化方法。
[0126]
在一实施例中,该存储介质存储有计算机可执行指令,该计算机可执行指令被一个或多个控制处理器执行,比如,被上述电子设备300中的一个或多个处理器320执行,可使得上述一个或多个处理器320执行本发明任意实施例提供的基于注解的数据反序列化方法或者序列化方法。
[0127]
以上所描述的实施例仅仅是示意性的,其中作为分离部件说明的单元可以是或者也可以不是物理上分开的,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。
[0128]
本领域普通技术人员可以理解,上文中所公开方法中的全部或某些步骤、系统可
以被实施为软件、固件、硬件及其适当的组合。某些物理组件或所有物理组件可以被实施为由处理器,如中央处理器、数字信号处理器或微处理器执行的软件,或者被实施为硬件,或者被实施为集成电路,如专用集成电路。这样的软件可以分布在计算机可读介质上,计算机可读介质可以包括计算机存储介质(或非暂时性介质)和通信介质(或暂时性介质)。如本领域普通技术人员公知的,术语计算机存储介质包括在用于存储信息(诸如计算机可读指令、数据结构、程序模块或其他数据)的任何方法或技术中实施的易失性和非易失性、可移除和不可移除介质。计算机存储介质包括但不限于ram、rom、eeprom、闪存或其他存储器技术、cd-rom、数字多功能盘(dvd)或其他光盘存储、磁盒、磁带、磁盘存储或其他磁存储装置、或者可以用于存储期望的信息并且可以被计算机访问的任何其他的介质。此外,本领域普通技术人员公知的是,通信介质通常包括计算机可读指令、数据结构、程序模块或者诸如载波或其他传输机制之类的调制数据信号中的其他数据,并且可包括任何信息递送介质。
[0129]
以上是对本发明的较佳实施进行了具体说明,但本发明并不局限于上述实施方式,熟悉本领域的技术人员在不违背本发明精神的。共享条件下还可作出种种等同的变形或替换,这些等同的变形或替换均包括在本发明权利要求所限定的范围内。
技术特征:
1.一种基于注解的数据反序列化方法,其特征在于,所述方法包括:获取序列化数据以及所述序列化数据对应的消息类型信息;通过预定义的第一注解根据所述消息类型信息获取所述序列化数据对应的目标对象;通过所述目标对象中每个目标属性预定义的第二注解对所述序列化数据进行反序列化处理,得到每个所述目标属性被赋值后的所述目标对象;其中,所述第二注解用于获取每个所述目标属性对应的反序列化实例,以通过所述反序列化实例对所述序列化数据进行反序列化处理。2.根据权利要求1所述的方法,其特征在于,所述通过所述目标对象中每个目标属性预定义的第二注解对所述序列化数据进行反序列化处理,得到每个所述目标属性被赋值后的所述目标对象,包括:利用反射机制获取所述目标对象中的每个目标属性以及每个所述目标属性对应的第二注解;对于每个所述目标属性,通过所述第二注解获取所述目标属性对应的反序列化实例,以通过所述反序列化实例对所述序列化数据进行反序列化处理;根据反序列化处理结果对所述目标属性进行赋值,得到每个所述目标属性被赋值后的所述目标对象。3.根据权利要求1所述的方法,其特征在于,所述获取序列化数据以及所述序列化数据对应的消息类型信息,包括:响应于接收到传输数据,通过输入流方式从所述传输数据中读取第一预设字节长度的数据,得到目标信息;若所述目标信息与预定义的消息起始标识符相同,则继续从所述传输数据中读取第二预设字节长度以及第三预设字节长度的数据,分别得到消息类型信息和消息长度信息,并根据所述消息长度信息继续从所述传输数据中读取得到序列化数据。4.根据权利要求3所述的方法,其特征在于,在所述响应于接收到传输数据,通过输入流方式从所述传输数据中读取第一预设字节长度的数据,得到目标信息之后,所述方法还包括:若所述目标信息与预定义的消息起始标识符不相同,则继续从所述传输数据中读取所述第一预设字节长度的数据,直至所述目标信息与预定义的消息起始标识符相同。5.一种基于注解的数据序列化方法,其特征在于,所述方法包括:获取待序列化对象;通过所述待序列化对象中每个待序列化属性预定义的注解对所述待序列化对象进行序列化处理,得到所述待序列化对象对应的序列化数据;其中,所述注解用于获取每个所述待序列化属性对应的序列化实例,以通过所述序列化实例对所述待序列化对象进行序列化处理。6.根据权利要求5所述的方法,其特征在于,所述通过所述待序列化对象中每个待序列化属性预定义的注解对所述待序列化对象进行序列化处理,得到所述待序列化对象对应的序列化数据,包括:利用反射机制获取所述待序列化对象中每个待序列化属性对应的属性值以及所述待序列化属性对应的注解;
对于每个待序列化属性,通过所述注解获取所述待序列化属性对应的序列化实例,以通过所述序列化实例对所述属性值进行序列化处理;根据序列化处理结果得到所述待序列化对象对应的序列化数据。7.一种基于注解的数据反序列化装置,其特征在于,所述装置包括:数据获取模块,用于获取序列化数据以及所述序列化数据对应的消息类型信息;目标对象获取模块,用于通过预定义的第一注解根据所述消息类型信息获取所述序列化数据对应的目标对象;反序列化模块,用于通过所述目标对象中每个目标属性预定义的第二注解对所述序列化数据进行反序列化处理,得到每个所述目标属性被赋值后的所述目标对象;其中,所述第二注解用于获取每个所述目标属性对应的反序列化实例,以通过所述反序列化实例对所述序列化数据进行反序列化处理。8.一种基于注解的数据序列化装置,其特征在于,所述装置包括:待序列化对象获取模块,用于获取待序列化对象;序列化模块,用于通过所述待序列化对象中每个待序列化属性预定义的注解对所述待序列化对象进行序列化处理,得到所述待序列化对象对应的序列化数据;其中,所述注解用于获取每个所述待序列化属性对应的序列化实例,以通过所述序列化实例对所述待序列化对象进行序列化处理。9.一种电子设备,其特征在于,包括:至少一个处理器;以及,与所述至少一个处理器通信连接的存储器;其中,所述存储器存储有计算机程序,所述计算机程序被所述至少一个处理器执行,以使所述至少一个处理器能够执行如权利要求1至4中任一项所述的基于注解的数据反序列化方法;以及如权利要求5和6中任一项所述的基于注解的数据序列化方法。10.一种计算机可读存储介质,存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1至4中任一项所述的基于注解的数据反序列化方法;以及如权利要求5和6中任一项所述的基于注解的数据序列化方法。
技术总结
本申请涉及计算机技术领域,提供了一种基于注解的数据反序列化以及序列化方法,该反序列化方法首先获取序列化数据以及序列化数据对应的消息类型信息,之后通过预定义的第一注解根据消息类型信息获取序列化数据对应的目标对象,从而通过目标对象中每个目标属性预定义的第二注解对序列化数据进行反序列化处理,得到每个目标属性被赋值后的所述目标对象,其中,第二注解用于获取每个目标属性对应的反序列化实例,以通过反序列化实例对序列化数据进行反序列化处理。本申请实施例在通信数据处理的过程中,调用预定义注解上定义的不同对象属性类型对应的反序列化方法,自动完成目标对象的反序列化,减少对通信数据的重复处理工作量。量。量。
技术研发人员:高炜 施渊籍 石晶林
受保护的技术使用者:中科南京移动通信与计算创新研究院
技术研发日:2023.03.14
技术公布日:2023/7/11
版权声明
本文仅代表作者观点,不代表航家之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)
航空之家 https://www.aerohome.com.cn/
飞机超市 https://mall.aerohome.com.cn/
航空资讯 https://news.aerohome.com.cn/