面向对象的序列化方法、装置、电子设备及可读存储介质与流程
未命名
07-22
阅读:93
评论:0
1.本技术涉及计算机技术领域,尤其涉及一种面向对象的序列化方法、装置、电子设备及可读存储介质。
背景技术:
2.序列化(serialization)是将数据对象转换为可以存储或传输的字节序列的过程,反序列化是指把字节序列恢复为数据对象的过程在序列化期间。序列化的字节序列适合于计算机存储以及网络传输,而反序列化的数据对象适合于存放在计算机内存中,供算法进行处理和访问。
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.所述存储器中存储机器可读指令,所述处理器通过调用所述机器可读指令,执行上述方法。
39.本技术还提供一种计算机可读存储介质,所述计算机可读存储介质存储有机器可读指令,所述机器可读指令在被处理器调用和执行时,实现上述方法。
40.在以上实施例记载的方案中,通过预先定义若干与数据类型对应的序列化接口,并调用所述序列化接口,针对数据对象中的每个对象成员进行序列化处理;由于预先定义
了与数据类型对应的序列化接口,并以数据对象为单位进行序列化,由此可以兼容不同的序列化协议,同时也可以基于每个数据类型对应的序列化接口自定义扩展新的序列化协议。
附图说明
41.图1是一示例性的实施例示出的一种面向对象的序列化的通信框架的示意图。
42.图2是一示例性的实施例示出的一种生成序列化文件的流程示意图。
43.图3是一示例性的实施例示出的一种将结构体类型的对象成员进行序列化的流程示意图。
44.图4是一示例性的实施例示出的一种面向对象的序列化装置所在电子设备的硬件结构图。
45.图5是一示例性的实施例示出的一种面向对象的序列化装置的框图。
具体实施方式
46.这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本技术相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本技术的一些方面相一致的装置和方法的例子。
47.需要说明的是:在其他实施例中并不一定按照本说明书示出和描述的顺序来执行相应方法的步骤。在一些其他实施例中,其方法所包括的步骤可以比本说明书所描述的更多或更少。此外,本说明书中所描述的单个步骤,在其他实施例中可能被分解为多个步骤进行描述;而本说明书中所描述的多个步骤,在其他实施例中也可能被合并为单个步骤进行描述。
48.目前,市面上主流的序列化工具有很多,例如protobuf工具,其具有空间开销小以及解析性能高的优点。protobuf工具可以针对不同的字段类型采用了不同的编码方式,以达到高效紧凑的数据压缩。但protobuf是一个特定的序列化工具,有自己特有的规则和算法,无法进行自定义的修改和扩展。
49.有鉴于此,本技术提出一种可以预先定义多种序列化接口,并基于所述序列化接口针对数据对象中的每个对象成员进行序列化处理的技术方案。
50.在实现时,可以获取待序列化的数据对象;所述数据对象包括至少一个对象成员;
51.在预先定义的若干与数据类型对应的序列化接口中,确定与所述数据对象中的各个对象成员的数据类型对应的序列化接口;
52.调用确定出的序列化接口,分别针对每个对象成员进行序列化处理,生成序列化文件。
53.在以上实施例记载的方案中,通过预先定义若干与数据类型对应的序列化接口,并调用所述序列化接口,针对数据对象中的每个对象成员进行序列化处理;由于预先定义了与数据类型对应的序列化接口,并以数据对象为单位进行序列化,由此可以兼容不同的序列化协议,同时也可以基于每个数据类型对应的序列化接口自定义扩展新的序列化协议。
54.请参见图1,图1是一示例性实施例提供的一种面向对象的序列化方法的流程示意图。所述方法可以应用于序列化工具或序列化系统。其中所述序列化系统可以是一个具有序列化服务的开发平台等,所述方法可以包括以下步骤:
55.步骤102,获取待序列化的数据对象;所述数据对象包括至少一个对象成员。
56.在本说明书中,所述数据对象通常可以指在面向对象程序设计中的数据对象的概念,通常可以指类的实例。
57.例如用户可以预先定义一个类,并创建该类的实例,所述实例即可以作为一个数据对象。
58.其中,用户预先定义类时,可以在类中定义若干成员属性以及成员方法。在创建该类的实例后,每个成员属性以及成员方法均可以作为数据对象中的一个对象成员。
59.待序列化的数据文件对应的数据结构中通常可以包括多个数据对象,在获取待序列化的数据对象时,可以由用户在序列化工具或序列化系统中输入待序列化的数据文件,并由序列化工具或序列化系统直接从所述数据文件中获取至少一个待序列化对象,也可以用户在序列化工具或序列化系统中直接输入待序列化的数据对象,以由序列化工具或序列化系统基于所述序列化方法针对数据对象进行序列化。
60.步骤104,在预先定义的若干与数据类型对应的序列化接口中,确定与所述数据对象中的各个对象成员的数据类型对应的序列化接口。
61.在本说明书中,所述序列化工具或序列化系统可以预先定义若干与数据类型对应的序列化接口,所述与数据类型对应的序列化接口具体用于针对不同数据类型的数据进行序列化。
62.其中,所述数据类型可以包括基础数据类型以及复杂数据类型。所述基础数据类型具体可以包括布尔类型,无符号8位整型类型,有符号8位整型,无符号16位整型类型,有符号16位整型,无符号32位整型类型,有符号32位整型,无符号64位整型类型,有符号64位整型,单精度浮点数。双精度浮点数,字符串等类型。
63.针对上述多种基础数据类型,在序列化工具或序列化系统中分别定义了与该种基础数据类型的序列化接口。例如,针对布尔类型的数据,该序列化接口可以为writeboolean(const bool&val);其中,writeboolean为接口名,bool&val为接口的调用参数。
64.其中,针对每种数据类型的数据进行序列化的具体实施方式,可以参考相关技术,在本说明书中不做具体限定。
65.所述复杂数据类型具体可以包括结构体类型,列表类型,字典类型等等。针对上述多种复杂数据类型,在序列化工具或序列化系统中也分别定义了与该种基础数据类型的序列化接口。例如,针对结构体类型的数据,该序列化接口可以为writestructbegin(const char*name);其中,writestructbegin为接口名,const char*name为接口的调用参数。
66.其中,针对每种复杂数据类型的数据进行序列化的具体实施方式,可以参考相关技术,在本说明书中不做具体限定。
67.通过针对每种基础数据类型,以及复杂数据类型均定义了不同的序列化接口,使得针对数据对象中的每个对象成员均可以调用该对象成员的数据类型对应的序列化接口,即可完成针对该对象成员的序列化处理,大大简化了用户的操作。
68.在一种实施方式中,还可以由用户自定义数据类型,并自定义该数据类型的序列
化接口。
69.例如,用户可能需要将无符号128位整型类型的数据进行序列化,但序列化工具或序列化系统中没有预先定义这种数据类型的序列化接口。用户可以通过序列化工具或序列化系统提供的扩展工具,通过扩展工具中的模板定义用户需要的数据类型,以及该数据类型对应的数据接口,以便后续进行序列化处理室时进行调用。
70.除此之外,用户还可以针对已有的数据类型,自定义该数据类型的序列化接口。例如,针对字典类型的数据,序列化工具或序列化系统中默认以键-值对的方式将字典中的数据每个键-值对进行序列化,用户可以通过自定义的方式将这种序列化方式自定义为分别将字典中的数据每个键进行序列化,以及每个键对应的值进行序列化。
71.上述例子只是自定义序列化接口的一种实施方式,用户可以根据实际应用的需要,针对数据类型以及数据类型对应的序列化接口分别进行自定义,在本说明书中不做具体限定。
72.在获取到待序列化的数据对象后,可以针对待序列化的数据对象中的每个对象成员,确定每个对象成员的数据类型,以及该数据类型对应的接口。
73.在预先定义的若干与数据类型对应的序列化接口中,确定与所述数据对象中的各个对象成员的数据类型对应的序列化接口。
74.确定所述数据对象中的各个对象成员的数据类型对应的序列化接口的具体方式,在本说明书中不做具体限定。
75.在序列化或序列化系统中默认存储了每种数据类型以及该数据类型对应的序列化接口的对应关系。
76.可以通过所述对象成员的数据类型,在所述对应关系中确定所述对象成员的数据类型对应的序列化接口。
77.步骤106,调用确定出的序列化接口,分别针对每个对象成员进行序列化处理,生成序列化文件。
78.在确定每个对象成员的数据类型对应的序列化接口后,可以基于确定出的序列化接口,分别针对每个对象成员进行序列化处理,生成序列化文件。其中,每个序列化接口分别具有调用参数,所述序列化工具或序列化系统可以自动将对象成员作为调用参数输入所述序列化接口,以由每个序列化接口分别针对所述对象成员进行序列化,并分别将序列化后的对象成员写入序列化文件。当数据对象中的每个对象成员均完成序列化后,即可以完成针对数据对象的序列化处理。
79.在一种实施方式中,所述序列化工具或序列化系统还定义了序列化的标准流程。在实际应用中,针对每一个数据对象,其序列化后的数据文件通常可以为一条消息,也即message。
80.在针对数据对象进行序列化前,可以向初始的序列化文件写入与所述数据对象对应的消息头标志,以代表消息的开始。
81.例如,在实际应用中写入消息头标志的函数可以是writemessagebegin(const std::string&name,const zmessagetype messagetype)其中,writemessagebegin为函数名,const std::string&name,const zmessagetype messagetype为函数的调用参数,其调用参数具体可以包括消息名以及消息类型。
82.同时,可以向初始的序列化文件写入数据对象中第一个对象成员对应的头标志,以代表针对该对象成员的序列化处理。然后可以基于该对象成员的数据类型对应的序列化接口,针对该对象成员进行序列化处理。当所述对象成员完成序列化处理后,可以向所述序列化文件写入与该对象成员对应的成员尾标志,以代表针对该对象成员的序列化处理完成。
83.例如,在实际应用中,写入成员头标志的函数可以是writesectionbegin(const char*name,const ztype sectiontype,const int16_tsectionid),其中,writesectionbegin为函数名,const ztype sectiontype,const int16_t sectionid为函数的调用参数,其调用参数具体可以包括成员类型,以及成员id。
84.例如,在实际应用中,写入成员尾标志的函数可以是writesectionend()。
85.重复上述步骤,针对数据对象中的每一个对象成员进行序列化处理,当所述数据对象中的每个对象成员完成序列化处理后,可以将成员结束标志以及消息尾标志写入所述序列化文件,完成针对数据对象的序列化处理过程。
86.例如,在实际应用中,写入成员结束标志的函数可以是writesectionstop(),写入消息尾标志的函数可以是writemessageend()。
87.请参见图2,图2是一示例性实施例提供的一种生成序列化文件的流程示意图。
88.如图2所示,步骤202,在针对数据对象进行序列化处理时,可以向初始的序列化文件中写入消息头标志,以表示针对该数据对象进行序列化处理的开始。
89.步骤204,可以确定该数据对象是否还有没有进行序列化处理的对象成员。如果还有没有进行序列化处理的对象成员可以针对该对象成员进行序列化处理。
90.步骤206,可以向序列化文件中写入成员头标志,以表示针对该对象成员进行序列化处理的开始。
91.步骤208,调用与该对象成员的数据类型对应的序列化接口,针对该对象成员进行序列化处理,将序列化后的对象成员写入所述序列化文件。
92.步骤210,可以向序列化文件中写入成员尾标志,表示完成针对该对象成员的序列化处理。并进一步进入步骤204,确定该数据对象是否还有没有进行序列化处理的对象成员。
93.如果全部对象成员均完成序列化处理,可以进入步骤212,写入成员结束标志,表示所有对象成员均完成序列化处理。并进入步骤214写入消息尾标志,表示完成针对该数据对象的序列化处理,并进入步骤216,生成与该数据对象对应的序列化文件。
94.在一种实施方式中,在实际应用中,用户可能并不需要将全部的对象成员进行序列化,因此用户可以选择部分对象成员,并在所述消息头标志中写入该部分对象成员的成员id,以由所述序列化工具或序列化系统基于成员id,将用户选择的对象成员进行序列化。
95.在一种实施方式中,所述数据对象的对象成员的数据类型包括结构体类型;所述结构体类型对应的结构体包括至少一个结构体成员;
96.在针对结构体类型的对象成员进行序列化时,可以针对结构体类型对应的结构体中的每个结构体成员,调用各个结构体成员的数据类型对应的序列化接口,分别针对每个结构体成员进行序列化处理。
97.在针对结构体类型的对象成员进行序列化前,可以向初始的序列化文件写入与所
述结构体对应的结构体头标志,以代表针对该结构体的开始。
98.例如,在实际应用中写入消息头标志的函数可以是writestructbegin(const char*name)其中,writestructbegin为函数名,const char*name为函数的调用参数,其调用参数具体可以包括结构体名。
99.同时,可以向初始的序列化文件写入结构体中第一个结构体成员对应的结构体成员头标志,以代表针对该结构体成员的序列化处理。然后可以基于该结构体成员的数据类型对应的序列化接口,针对该结构体成员进行序列化处理。当所述结构体成员完成序列化处理后,可以向所述序列化文件写入与该结构体成员对应的结构体成员尾标志,以代表针对该结构体成员的序列化处理完成。
100.例如,在实际应用中,写入结构体成员头标志的函数可以是writestructsectionbegin(const char*name,const ztype sectiontype,const int16_t sectionid),其中,writestructsectionbegin为函数名,const char*name,const ztype sectiontype,const int16_t sectionid为函数的调用参数,其调用参数具体可以包括结构体成员类型,以及成员id。
101.例如,在实际应用中,写入结构体成员尾标志的函数可以是writestructsectionend()。
102.重复上述步骤,针对结构体中的每一个结构体成员进行序列化处理,当所述结构体中的每个结构体成员完成序列化处理后,可以将结构体尾标志写入所述序列化文件,完成针对结构体的序列化处理过程。
103.例如,在实际应用中,写入结构体成员尾标志的函数可以是writestructend()。
104.请参见图3,图3是一示例性实施例提供的一种将结构体类型的对象成员进行序列化的流程示意图。所述流程可以应用于图2示出的流程图中的步骤206以及步骤210之间。
105.如图3所示,步骤302,在针对结构体类型的对象成员进行序列化处理时,可以向初始的序列化文件中写入结构体头标志,以表示针对该结构体进行序列化处理的开始。
106.步骤304,可以确定该结构体是否还有没有进行序列化处理的结构体成员。如果还有没有进行序列化处理的结构体成员可以针对该结构体成员进行序列化处理。
107.步骤306,可以向序列化文件中写入成员头标志,以表示针对该对象成员进行序列化处理的开始。
108.步骤308,调用与该结构体成员的数据类型对应的序列化接口,针对该结构体成员进行序列化处理,将序列化后的结构体成员写入所述序列化文件。
109.步骤310,可以向序列化文件中写入结构体成员尾标志,表示完成针对该结构体成员的序列化处理。并进一步进入步骤304,确定该结构体是否还有没有进行序列化处理的结构体成员。
110.如果全部结构体成员均完成序列化处理,可以进入步骤312写入结构体尾标志,表示完成针对该结构体的序列化处理。
111.需要说明的是,所述结构体中的结构成员的数据类型也可能为结构类型,因此可以将图3示出的流程图进一步应用于步骤306以及步骤310之间,以完成针对嵌套结构体的序列化处理。同理,多层嵌套的结构体也可以使用如图3示出的流程示意图进行序列化处理,在此不再赘述。
112.在一种实施方式中,所述数据对象的对象成员的数据类型包括列表类型;所述列表类型对应的列表包括至少一个元素。
113.在针对列表的对象成员进行序列化时,可以向初始的序列化文件写入所述列表类型对应的列表的长度,并在预先定义的若干与数据类型对应的序列化接口中,确定与所述列表中的各个元素的数据类型对应的序列化接口;调用确定出的序列化接口,分别针对列表中的每个元素进行序列化处理。
114.在一种实施方式中,所述数据对象的对象成员的数据类型包括字典类型;所述字典类型对应的字典包括至少一组对应关系;所述对应关系由第一元素以及第二元素构成。
115.其中,所述字典通常指以键值对的形式进行存储的数据结构,每一个键值对即为一组对应关系,通常可以将键值对中的键作为第一元素,将键值对中的值作为第二元素。
116.在针对字典类型的对象成员进行序列化时,可以向初始的序列化文件写入所述字典的长度,以及所述第一元素和第二元素的数据类型,在预先定义的若干与数据类型对应的序列化接口中,确定与所述字典中的第一元素的数据类型对应的第一序列化接口和第二元素的数据类型对应的第二序列化接口;调用确定出的第一序列化接口和第二序列化接口,分别针对所述字典中的每组对应关系中的第一元素和第二元素进行序列化处理。
117.在一种实施方式中,所述序列化工具或序列化系统还可以预先定义若干与数据类型对应的反序列化接口,所述与数据类型对应的反序列化接口具体用于针对不同数据类型的数据进行反序列化。
118.需要说明的是,每种序列化接口与反序列化接口相互对应,用户在自定义序列化接口时,还需要自定义与序列化接口对应的反序列化接口,以用于将序列化文件还原为对应的数据对象。
119.其中,针对每种数据类型的数据进行反序列化的具体实施方式,可以参考相关技术,在本说明书中不做具体限定。
120.所述序列化工具或序列化系统可以接收序列化文件,确定所述序列化文件中的数据对象,以及所述数据对象中的各个对象成员;
121.其中,所述序列化文件可以由用户手动输入至序列化工具或序列化系统,也可以由所述序列化工具或序列化系统对接业务系统自动接收已序列化的序列化文件,在本说明书中具体限定。
122.所述序列化工具可以基于所述序列化文件中的消息头标志,消息尾标志;成员头标志,成员尾标志,确定所述序列化文件中包含的数据对象,以及所述数据对象中的各个对象成员。
123.在预先定义的若干与数据类型对应的反序列化接口中,确定与所述数据对象中的各个对象成员的数据类型对应的反序列化接口;
124.确定所述数据对象中的各个对象成员的数据类型对应的反序列化接口的具体方式,在本说明书中不做具体限定。
125.在序列化或序列化系统中默认存储了每种数据类型以及该数据类型对应的反序列化接口的对应关系。
126.可以通过所述对象成员的数据类型,在所述对应关系中确定所述对象成员的数据类型对应的反序列化接口。
127.调用确定出的反序列化接口,分别针对每个对象成员进行反序列化处理,以将序列化文件还原为数据对象。
128.在确定每个对象成员的数据类型对应的反序列化接口后,可以基于确定出的反序列化接口,分别针对每个对象成员进行反序列化处理,将序列化文件还原为数据对象。
129.在以上实施例记载的方案中,通过预先定义若干与数据类型对应的序列化接口,并调用所述序列化接口,针对数据对象中的每个对象成员进行序列化处理;由于预先定义了与数据类型对应的序列化接口,并以数据对象为单位进行序列化,由此可以兼容不同的序列化协议,同时也可以基于每个数据类型对应的序列化接口自定义扩展新的序列化协议。
130.与上述面向对象的序列化方法的实施例对应的,本说明书还提供了面向对象的序列化装置的实施例。
131.请参见图4,图4是一示例性的实施例示出的一种面向对象的序列化装置所在电子设备的硬件结构图。在硬件层面,该设备包括处理器402、内部总线404、网络接口406、内存408以及非易失性存储器410,当然还可能包括其他业务所需要的硬件。本说明书一个或多个实施例可以基于软件方式来实现,比如由处理器402从非易失性存储器410中读取对应的计算机程序到内存408中然后运行。当然,除了软件实现方式之外,本说明书一个或多个实施例并不排除其他实现方式,比如逻辑器件抑或软硬件结合的方式等等,也就是说以下处理流程的执行主体并不限定于各个逻辑单元,也可以是硬件或逻辑器件。
132.请参见图5,图5是一示例性的实施例示出的一种面向对象的序列化装置的框图。面向对象的序列化装置可以应用于图4所示的电子设备中,以实现本说明书的技术方案。其中,上述面向对象的序列化装置可以包括:
133.数据对象获取单元502,用于获取待序列化的数据对象;所述数据对象包括至少一个对象成员;
134.序列化接口确定单元504,用于在预先定义的若干与数据类型对应的序列化接口中,确定与所述数据对象中的各个对象成员的数据类型对应的序列化接口;
135.序列化处理单元506,用于调用确定出的序列化接口,分别针对每个对象成员进行序列化处理,生成序列化文件。
136.在本实施例中,序列化处理单元,进一步用于向初始的序列化文件写入与所述数据对象对应的消息头标志,以及与所述数据对象中的各个对象成员对应的成员头标志;
137.调用确定出的序列化接口,分别针对每个对象成员进行序列化处理;
138.将序列化后的对象成员写入所述序列化文件,并向所述序列化文件写入与所述对象成员对应的成员尾标志;
139.确定所述数据对象中的每个对象成员完成序列化处理后,将成员结束标志以及消息尾标志写入所述序列化文件,完成针对数据对象的序列化处理过程。
140.在本实施例中,所述数据对象的对象成员的数据类型包括结构体类型;所述结构体类型对应的结构体包括至少一个结构体成员;
141.序列化处理单元,进一步用于在预先定义的若干与数据类型对应的序列化接口中,确定与所述结构体类型对应的结构体中的各个结构体成员的数据类型对应的序列化接口;
142.调用确定出的序列化接口,分别针对每个结构体成员进行序列化处理。
143.在本实施例中,序列化处理单元,进一步用于向初始的序列化文件写入与所述结构体对应的结构体头标志,以及与所述结构体中的各个结构体成员的结构体成员头标志;
144.调用确定出的序列化接口,分别针对每个结构体成员进行序列化处理;
145.将序列化后的结构体成员写入所述序列化文件,并向所述序列化文件写入与所述结构体成员对应的结构体成员尾标志;
146.确定所述结构体中的各个结构体成员完成序列化处理后,将结构体尾标志写入所述序列化文件,完成针对所述结构体的序列化处理过程。
147.在本实施例中,所述数据对象的对象成员的数据类型包括列表类型,所述列表类型对应的列表包括至少一个元素;
148.序列化处理单元,进一步用于向初始的序列化文件写入所述列表类型对应的列表的长度;
149.在预先定义的若干与数据类型对应的序列化接口中,确定与所述列表中的各个元素的数据类型对应的序列化接口;
150.调用确定出的序列化接口,分别针对列表中的每个元素进行序列化处理。
151.在本实施例中,所述数据对象的对象成员的数据类型包括字典类型,所述字典类型对应的字典包括至少一组对应关系;所述对应关系由第一元素以及第二元素构成;
152.序列化处理单元,进一步用于向初始的序列化文件写入所述字典的长度,以及所述第一元素和第二元素的数据类型;
153.在预先定义的若干与数据类型对应的序列化接口中,确定与所述字典中的第一元素的数据类型对应的第一序列化接口和第二元素的数据类型对应的第二序列化接口;
154.调用确定出的第一序列化接口和第二序列化接口,分别针对所述字典中的每组对应关系中的第一元素和第二元素进行序列化处理。
155.在本实施例中,所述装置还包括:
156.反序列化单元,用于接收序列化文件,确定所述序列化文件中的数据对象,以及所述数据对象中的各个对象成员;
157.在预先定义的若干与数据类型对应的反序列化接口中,确定与所述数据对象中的各个对象成员的数据类型对应的反序列化接口;
158.调用确定出的反序列化接口,分别针对每个对象成员进行反序列化处理,以将序列化文件还原为数据对象。
159.上述装置中各个单元的功能和作用的实现过程具体详见上述方法中对应步骤的实现过程,在此不再赘述。
160.对于装置实施例而言,由于其基本对应于方法实施例,所以相关之处参见方法实施例的部分说明即可。以上所描述的装置实施例只是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本说明书方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
161.本说明书所涉及的用户信息(包括但不限于用户设备信息、用户个人信息等)和数
据(包括但不限于用于分析的数据、存储的数据、展示的数据等),均为经用户授权或者经过各方充分授权的信息和数据,并且相关数据的收集、使用和处理需要遵守相关国家和地区的相关法律法规和标准,并提供有相应的操作入口,供用户选择授权或者拒绝。
162.本说明书还提供了一种计算机可读存储介质的实施例。所述计算机可读存储介质存储有机器可读指令,所述机器可读指令在被处理器调用和执行时,可以实现本说明书中任意一个实施例提供的所述面向对象的序列化方法。
163.本说明书实施例提供的计算机可读存储介质具体可以包括但不限于任何类型的盘(包括软盘、硬盘、光盘、cd-rom、和磁光盘)、rom(read-only memory,只读存储器)、ram(random access memory,随机存储器)、eprom(erasable programmable read-only memory,可擦写可编程只读存储器)、eeprom(electrically erasable programmable read-only memory,电可擦可编程只读存储器)、闪存、磁性卡片或光纤卡片。也就是,可读存储介质包括可以存储或传输信息的可读介质。
164.上述实施例阐明的系统、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机,计算机的具体形式可以是个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件收发设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任意几种设备的组合。
165.在一个典型的配置中,计算机包括一个或多个处理器(cpu)、输入/输出接口、网络接口和内存。
166.内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(ram)和/或非易失性内存等形式,如只读存储器(rom)或闪存(flash ram)。内存是计算机可读介质的示例。
167.计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(pram)、静态随机存取存储器(sram)、动态随机存取存储器(dram)、其他类型的随机存取存储器(ram)、只读存储器(rom)、电可擦除可编程只读存储器(eeprom)、快闪记忆体或其他内存技术、只读光盘只读存储器(cd-rom)、数字多功能光盘(dvd)或其他光学存储、磁盒式磁带、磁盘存储、量子存储器、基于石墨烯的存储介质或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
168.还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个
……”
限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。
169.上述对本说明书特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺
序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
170.在本说明书一个或多个实施例中使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本说明书一个或多个实施例。在本说明书一个或多个实施例和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。
171.应当理解,尽管在本说明书一个或多个实施例可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本说明书一个或多个实施例范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在
……
时”或“当
……
时”或“响应于确定”。
172.以上所述仅为本说明书一个或多个实施例的较佳实施例而已,并不用以限制本说明书一个或多个实施例,凡在本说明书一个或多个实施例的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本说明书一个或多个实施例保护的范围之内。
技术特征:
1.一种面向对象的序列化方法,其特征在于,所述方法包括:获取待序列化的数据对象;所述数据对象包括至少一个对象成员;在预先定义的若干与数据类型对应的序列化接口中,确定与所述数据对象中的各个对象成员的数据类型对应的序列化接口;调用确定出的序列化接口,分别针对每个对象成员进行序列化处理,生成序列化文件。2.根据权利要求1所述的方法,其特征在于,调用确定出的序列化接口,分别针对每个成员进行序列化处理,生成序列化文件,包括:向初始的序列化文件写入与所述数据对象对应的消息头标志,以及与所述数据对象中的各个对象成员对应的成员头标志;调用确定出的序列化接口,分别针对每个对象成员进行序列化处理;将序列化后的对象成员写入所述序列化文件,并向所述序列化文件写入与所述对象成员对应的成员尾标志;确定所述数据对象中的每个对象成员完成序列化处理后,将成员结束标志以及消息尾标志写入所述序列化文件,完成针对数据对象的序列化处理过程。3.根据权利要求2所述的方法,其特征在于,所述数据对象的对象成员的数据类型包括结构体类型;所述结构体类型对应的结构体包括至少一个结构体成员;所述调用确定出的序列化接口,分别针对每个对象成员进行序列化处理,包括:在预先定义的若干与数据类型对应的序列化接口中,确定与所述结构体类型对应的结构体中的各个结构体成员的数据类型对应的序列化接口;调用确定出的序列化接口,分别针对每个结构体成员进行序列化处理。4.根据权利要求3所述的方法,其特征在于,调用确定出的序列化接口,分别针对每个结构体成员进行序列化处理,包括:向初始的序列化文件写入与所述结构体对应的结构体头标志,以及与所述结构体中的各个结构体成员的结构体成员头标志;调用确定出的序列化接口,分别针对每个结构体成员进行序列化处理;将序列化后的结构体成员写入所述序列化文件,并向所述序列化文件写入与所述结构体成员对应的结构体成员尾标志;确定所述结构体中的各个结构体成员完成序列化处理后,将结构体尾标志写入所述序列化文件,完成针对所述结构体的序列化处理过程。5.根据权利要求2所述的方法,其特征在于,所述数据对象的对象成员的数据类型包括列表类型,所述列表类型对应的列表包括至少一个元素;调用确定出的序列化接口,分别针对每个对象成员进行序列化处理,包括:向初始的序列化文件写入所述列表类型对应的列表的长度;在预先定义的若干与数据类型对应的序列化接口中,确定与所述列表中的各个元素的数据类型对应的序列化接口;调用确定出的序列化接口,分别针对列表中的每个元素进行序列化处理。6.根据权利要求1所述的方法,其特征在于,所述数据对象的对象成员的数据类型包括字典类型,所述字典类型对应的字典包括至少一组对应关系;所述对应关系由第一元素以及第二元素构成;
调用确定出的序列化接口,分别针对每个对象成员进行序列化处理,包括:向初始的序列化文件写入所述字典的长度,以及所述第一元素和第二元素的数据类型;在预先定义的若干与数据类型对应的序列化接口中,确定与所述字典中的第一元素的数据类型对应的第一序列化接口和第二元素的数据类型对应的第二序列化接口;调用确定出的第一序列化接口和第二序列化接口,分别针对所述字典中的每组对应关系中的第一元素和第二元素进行序列化处理。7.根据权利要求1所述的方法,其特征在于,所述方法还包括:接收序列化文件,确定所述序列化文件中的数据对象,以及所述数据对象中的各个对象成员;在预先定义的若干与数据类型对应的反序列化接口中,确定与所述数据对象中的各个对象成员的数据类型对应的反序列化接口;调用确定出的反序列化接口,分别针对每个对象成员进行反序列化处理,以将序列化文件还原为数据对象。8.一种面向对象的序列化装置,其特征在于,所述装置包括:数据对象获取单元,用于获取待序列化的数据对象;所述数据对象包括至少一个对象成员;序列化接口确定单元,用于在预先定义的若干与数据类型对应的序列化接口中,确定与所述数据对象中的各个对象成员的数据类型对应的序列化接口;序列化处理单元,用于调用确定出的序列化接口,分别针对每个对象成员进行序列化处理,生成序列化文件。9.根据权利要求8所述的装置,其特征在于,序列化处理单元,进一步用于向初始的序列化文件写入与所述数据对象对应的消息头标志,以及与所述数据对象中的各个对象成员对应的成员头标志;调用确定出的序列化接口,分别针对每个对象成员进行序列化处理;将序列化后的对象成员写入所述序列化文件,并向所述序列化文件写入与所述对象成员对应的成员尾标志;确定所述数据对象中的每个对象成员完成序列化处理后,将成员结束标志以及消息尾标志写入所述序列化文件,完成针对数据对象的序列化处理过程。10.根据权利要求9所述的装置,其特征在于,所述数据对象的对象成员的数据类型包括结构体类型;所述结构体类型对应的结构体包括至少一个结构体成员;序列化处理单元,进一步用于在预先定义的若干与数据类型对应的序列化接口中,确定与所述结构体类型对应的结构体中的各个结构体成员的数据类型对应的序列化接口;调用确定出的序列化接口,分别针对每个结构体成员进行序列化处理。11.根据权利要求10所述的装置,其特征在于,序列化处理单元,进一步用于向初始的序列化文件写入与所述结构体对应的结构体头标志,以及与所述结构体中的各个结构体成员的结构体成员头标志;调用确定出的序列化接口,分别针对每个结构体成员进行序列化处理;将序列化后的结构体成员写入所述序列化文件,并向所述序列化文件写入与所述结构
体成员对应的结构体成员尾标志;确定所述结构体中的各个结构体成员完成序列化处理后,将结构体尾标志写入所述序列化文件,完成针对所述结构体的序列化处理过程。12.根据权利要求9所述的装置,其特征在于,所述数据对象的对象成员的数据类型包括列表类型,所述列表类型对应的列表包括至少一个元素;序列化处理单元,进一步用于向初始的序列化文件写入所述列表类型对应的列表的长度;在预先定义的若干与数据类型对应的序列化接口中,确定与所述列表中的各个元素的数据类型对应的序列化接口;调用确定出的序列化接口,分别针对列表中的每个元素进行序列化处理。13.根据权利要求8所述的装置,其特征在于,所述数据对象的对象成员的数据类型包括字典类型,所述字典类型对应的字典包括至少一组对应关系;所述对应关系由第一元素以及第二元素构成;序列化处理单元,进一步用于向初始的序列化文件写入所述字典的长度,以及所述第一元素和第二元素的数据类型;在预先定义的若干与数据类型对应的序列化接口中,确定与所述字典中的第一元素的数据类型对应的第一序列化接口和第二元素的数据类型对应的第二序列化接口;调用确定出的第一序列化接口和第二序列化接口,分别针对所述字典中的每组对应关系中的第一元素和第二元素进行序列化处理。14.根据权利要求8所述的装置,其特征在于,所述装置还包括:反序列化单元,用于接收序列化文件,确定所述序列化文件中的数据对象,以及所述数据对象中的各个对象成员;在预先定义的若干与数据类型对应的反序列化接口中,确定与所述数据对象中的各个对象成员的数据类型对应的反序列化接口;调用确定出的反序列化接口,分别针对每个对象成员进行反序列化处理,以将序列化文件还原为数据对象。15.一种电子设备,其特征在于,包括通信接口、处理器、存储器和总线,所述通信接口、所述处理器和所述存储器之间通过总线相互连接;所述存储器中存储机器可读指令,所述处理器通过调用所述机器可读指令,执行权利要求1-7任一项所述的方法。16.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有机器可读指令,所述机器可读指令在被处理器调用和执行时,实现权利要求1-7任一项所述的方法。
技术总结
本申请提供一种面向对象的序列化方法、装置、电子设备及可读存储介质,所述方法包括,获取待序列化的数据对象;所述数据对象包括至少一个对象成员;在预先定义的若干与数据类型对应的序列化接口中,确定与所述数据对象中的各个对象成员的数据类型对应的序列化接口;调用确定出的序列化接口,分别针对每个对象成员进行序列化处理,生成序列化文件。由此可以兼容不同的序列化协议,同时也可以基于每个数据类型对应的序列化接口自定义扩展新的序列化协议。议。议。
技术研发人员:徐博士 赵云 朱进
受保护的技术使用者:浙江吉利控股集团有限公司
技术研发日:2023.03.31
技术公布日:2023/7/20
版权声明
本文仅代表作者观点,不代表航空之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)
飞行汽车 https://www.autovtol.com/
