一种对象序列化处理的方法和装置与流程
未命名
08-09
阅读:106
评论:0
1.本发明涉及计算机技术领域,尤其涉及一种对象序列化处理的方 法和装置。
背景技术:
2.序列化是将对象的状态信息转换为可以存储或传输的形式的过程, 主要实现将对象串行化为二进制字节流,可以对流化后的对象进行读 写操作,也可以将流化后的对象进行传输与通信。目前,主要的序列 化技术有protostuff、kryo、hessian和jdk等。
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.图1是根据本发明实施例的对象序列化处理的方法的主要流程的 示意图;
29.图2是本发明实施例的数据压缩示意图;
30.图3是本发明实施例的序列化框架jse的初始化示意图;
31.图4是本发明实施例基于序列化框架jse的序列化过程示意图;
数据是否为空,并且设置存储单元byte[]的初始长度,以便于后续序列 化结果的存放。
[0051]
步骤s102、根据所述对象的数据类型,从序列化类工厂中获取所 述对象的序列化类,其中,所述序列化类工厂存储数据类型与序列化 类之间的映射关系。
[0052]
具体地,序列化平台的上下文组件根据所述对象的数据类型,从 序列化类工厂中获取所述对象的序列化类,所述序列化类工厂封装了 序列化平台所支持的数据类型的序列化类,并基于数据类型和数据类 型所对应的序列化类,建立以数据类型为key,数据类型对应的序列化 类为value的键值对关系映射表,以实现对具体类的序列化支持以及序 列化类的封装。
[0053]
根据本发明的一个实施例,在从序列化类工厂中未能获取所述对 象的序列化类的情况下,根据所述对象的数据类型创建与所述对象对 应的序列化类并保存到所述序列化类工厂中。
[0054]
具体地,通过序列化平台的类注册调用序列化类工厂,从序列化 类工厂的键值对关系映射表中查找待序列化对象的序列化类,对于无 序列化历史记录的待序列化对象,在序列化类工厂中没有此待序列化 对象的序列化类的存储,需要根据所述对象的数据类型创建与所述对 象对应的序列化类并保存在所述序列化类工厂中。
[0055]
根据本发明的另一个实施例,根据所述对象的数据类型创建与所 述对象对应的序列化类,包括:获取所述对象的属性;将所述对象的 属性和对应的属性值存取器进行封装,创建与所述对象对应的序列化 类。
[0056]
具体地,序列化平台的序列化类工厂从待序列化对象中获取对象 的属性,如:待序列对象为一个订单,其属性包括用户id、订单编号、 订单事件等,将所述对象的属性和用于存取属性值的属性值存取器进 行封装,创建与所述对象对应的序列化类,以实现封装类属性的具体 序列化类。
[0057]
根据本发明的再一个实施例,从序列化类工厂中获取所述对象的 序列化类之后,还包括:判断所述对象是否要循环引用所述序列化类。
[0058]
具体地,序列化平台的上下文组件通过对待序列化对象中的属性 对象的序列化历史记录来判定所述待序列化对象是否是循环引用,例 如:一个对象包含对其自身的引用,如果是循环引用,则调用序列化 平台的循环引用机制获取待序列化对象的属性信息。
[0059]
步骤s103、根据所述对象的序列化类,依次对所述对象的每个属 性信息进行序列化处理,其中,所述序列化处理包括:数据类型转换 和数据压缩,所述属性信息包括属性和属性值。
[0060]
具体地,根据所述对象的序列化类,对于待序列化对象的每个属 性信息依次分别做序列化处理,所述属性信息包括属性和属性值。
[0061]
根据本发明的一个实施例,所述数据类型转换包括:将布尔类型 转换为字节类型、将短整型转换为字符类型、将浮点类型转换为整数 类型、将双精度类型转换为长整型。
[0062]
具体地,所述的数据类型包括布尔类型、字节类型、字符类型、 短整型、整数类型、浮点类型、长整型和双精度类型,其中布尔类型 和字节类型的字节长度为1、字符类型和短整型的字节长度为2、整数 类型和浮点类型的字节长度为4、长整型和双精度类型的字节长度为8。 按照数据类型占用相同的字节长度可以将数据类型分为4种,分别为 字节/布尔类型、字符/短整形类型、整数/浮点类型和长整形/双精度类 型,相应的在序列化上述数据类
型时,只需要处理4种数据类型的序 列化,通过将布尔类型转换为字节类型、将短整型转换为字符类型、 将浮点类型转换为整数类型、将双精度类型转换为长整型实现了数据 类型的减半,大大缩减了代码量,减少了处理复杂度,提高了序列化 的效率。
[0063]
另外,上述的数据类型转换还支持特殊类型的转换,可以根据业 务需要,将byte[]数据类型转换为byte[]类型,以便于本发明方法适用 于个性化的序列化需求,序列化功能更全面。
[0064]
根据本发明的另一个实施例,所述数据压缩包括:获取数据类型 转换后的中间数据的数据长度,并确定所述数据长度所属的数据长度 区间,所述数据长度区间是基于转换后的数据类型设置的;根据预设 的数据长度区间与存储长度的映射关系,确定所述中间数据存储于所 述存储单元所需的存储长度;将所述中间数据存储于所述存储单元以 进行数据压缩。
[0065]
根据本发明的再一个实施例,将所述中间数据存储于所述存储单 元之前,还包括:根据所述中间数据存储于所述存储单元所需的存储 长度和所述存储单元的可用存储空间,判断所述存储单元是否需要扩 容;在需要扩容的情况下,扩大所述存储单元的容量。其中,所述存 储单元的可用存储空间可以根据存储单元目前的总存储空间与已存储 空间求差得到。
[0066]
具体地,根据上述的数据类型转换,得到转换后的数据类型分别 为字节类型、字符类型、整数类型和长整型,其中长整形的数据长度 区间最大为8个字节,从8个字节的长度区间为最大区间开始,依次 递减1个字节,直至1个字节的长度区间,共计8个不同的数据长度 区间。由于,序列化结果最终存储的是字节类型,所以字节类型的数 据不用压缩,同样布尔类型可以用0/1标识,而且可以直接转字节类型, 所以字节/布尔类型不用压缩,也就是数据类型转换后的有效数据类型 仅为3种:整数类型、字符类型和长整型。获取数据类型转换后的中 间数据的数据长度,依据上述8个不同的数据长度区间,确定所述中 间数据的数据长度属于的数据长度区间;根据上述8个不同的数据长 度区间对应的字节长度建立的数据长度区间与存储长度的映射关系, 确定所述中间数据存储于序列化结果的存储单元所需的实际存储长度; 根据所述中间数据存储于所述存储单元所需的存储长度,结合所述存 储单元的可用存储空间,如果可用存储空间不能满足存储中间数据所 需的存储长度,则对存储单元进行扩容处理,以满足中间数据的存储 需求;最后将所述中间数据存储于所述存储单元以进行数据压缩。
[0067]
通过上述的数据压缩,进一步减少了序列化的数据类型,有效缩 减了序列化后的字节数组长度,减小了序列化的时间,提升了序列化 的性能。
[0068]
图2是本发明实施例的数据压缩示意图,根据本发明实施例,数 据类型经过转换后仅需要对整数类型int、字符类型char和长整型long 进行数据压缩,bytearray接口定义序列化结果存储单元byte[]数组相 关的属性和访问权限,internalbytearray完成对整数类型int、字符类型 char和长整型long的序列化数据压缩工作,并将序列化结果存放于 bytearray的字节数组中。图中i的范围为数据长度区间,不同的数据 长度区间对应于不同的存储长度也就是预设的数据长度区间与存储长 度的映射关系,最长的存储长度为8个字节,最短的存储长度为1个 字节,对于int类型,最长的存储长度为4个字节,根据中间数据的数 据长度,确定中间数据属于的数据长度区间,从而确定了中间数据存 储于所述存储
单元所需的存储长度,对于long类型和char类型也类似, 此不再赘述。例如,中间数据为int类型,数据值为201,i的数值分别 表示8、16、24、32位数据长度所对应的数值范围,数据值201属于 i《=255,即可用2个字节作为存储长度。
[0069]
根据本发明的又一个实施例,在对每个属性信息进行序列化处理 之后,还包括:根据所述起始位置将每个属性信息对应的序列化结果 依次保存到所述存储单元中。
[0070]
具体地,对每个属性信息进行序列化处理后,需要将每个属性信 息的序列化结果保存在序列化结果存储单元中,根据设置所述对象的 序列化结果在存储单元存放的起始位置,将每个属性信息对应的序列 化结果按照每个属性信息在所述对象中的前后关系依次顺序保存,优 选地,每个属性信息的序列化结果与其前后属性信息的序列化结果首 尾相接的存放在序列化结果存储单元中。如:带序列化对象包括属性 信息1、属性信息2、属性信息3,则相应的序列化结果的存储属性为 序列化子结果1、序列化子结果2、序列化子结果3。
[0071]
通常地,上述的序列化的方法是基于序列化平台上的序列化框架 来实现的,本发明基于自主研发的序列化框架jse来进行序列化,另外 基于jse序列化框架不仅支持对待序列化对象进行序列化,而且也支持 对字节流进行反序列化,反序列化的执行与上述流程类似,执行序列 化的数据压缩和数据类型转换的逆过程可得到反序列化结果。
[0072]
图3是本发明实施例的序列化框架jse的初始化示意图,jse框架 包括jse接口、jse上下文、序列化类工厂和类注册几个模块,jse的初 始化通过jse接口实现,对jse上下文进行初始化;序列化类工厂主要 负责对具体类的序列化支持以及序列化类的封装,初始化其中的序列 化类表,将支持的序列化类封装到序列化类表中,其中序列化类表中 以数据类型为key,序列化类为value,初始化过程简洁、高效,易于 后续初始化的扩展;在序列化类工厂初始化完成之后紧接着初始化类 注册,类注册主要负责待序列化类的具体序列化类的封装、抽象,通 过映射接口组建一个jse框架支持的数据类型的具体序列化方式的类 容器,类注册根据序列化类工厂的初始化结果从序列化类工厂中获取 序列化类以匹配待序列化对象的具体序列化类,若在序列化类工厂的 序列化类表中没有找到待序列化对象的序列化类,根据待序列化对象 创建一个映射接口以封装待序列化对象对应的序列化类的属性和属性 值存取器,其中待序列化类的属性的封装通过第三方jar工具包来完成。
[0073]
图4是本发明实施例基于序列化框架jse的序列化过程示意图,序 列化接口jse根据用户的序列化请求,判断待序列化对象是否为空,在 待序列化对象不为空的情况下,设置待序列化对象的序列化结果在存 储单元byte[]存放的起始位置;作为序列化平台统筹序列化类工厂和类 注册之间关系的jse上下文,对byte[]数组参数进行校验,获取类注册 的映射接口,若未成功获取类注册的映射接口,在序列化类表中没有 序列化类的情况下,根据待序列化的类型初始化序列化类,创建映射 接口以获取待序列化对象的具体序列化类,并判断待序列化对象是否 是循环引用,此中以非循环引用进行说明,循环引用与此逻辑一样, 对于非循环引用的情况,根据上述序列化接口设置的byte[]存放的起始 位置,存储序列化的下标,循环获取待序列对象的属性信息,开始序 列化待序列对象的属性信息,通过数据类型转换和数据压缩,得到待 序列化对象的序列化结果,完成任务。
[0074]
图5(a)、(b)、(c)、(d)是本发明实施例基于jse序列化 框架的序列化性能比较示意图,其中图5(a)和(b)分别为小数据对 象的序列化码流的大小比较和序列化速度比较,
图5(c)和(d)分别 为大数据对象的序列化码流的大小比较和序列化速度比较。经过比较 可以看到基于jse序列化框架的序列化不仅序列化码流更小,而且序列 化速度也更快,性能优于现有的序列化框架,尤其是对大数据对象的 序列化,基于jse序列化框架的序列化有更大的性能优势。
[0075]
图6是根据本发明实施例的对象序列化处理的装置的主要模块示 意图。如图6所示,对象序列化处理的装置600主要包括对象获取模 块601、序列化类获取模块602和序列化处理模块603。
[0076]
对象获取模块601,用于根据接收到的序列化请求,获取待序列化 对象和所述对象的数据类型;
[0077]
序列化类获取模块602,用于根据所述对象的数据类型,从序列化 类工厂中获取所述对象的序列化类,其中,所述序列化类工厂存储数 据类型与序列化类之间的映射关系;
[0078]
序列化处理模块603,用于根据所述对象的序列化类,依次对所述 对象的每个属性信息进行序列化处理,其中,所述序列化处理包括: 数据类型转换和数据压缩,所述属性信息包括属性和属性值。
[0079]
具体地,对象序列化处理的装置600还包括初始设置模块(图中 未示出),用于在获取待序列化对象和所述对象的数据类型之后,设 置所述对象的序列化结果在存储单元存放的起始位置;校验所述存储 单元内的初始数据以及设置所述存储单元的初始长度;并且,具体地, 对象序列化处理的装置600还包括结果存储模块(图中未示出),用 于:在对每个属性信息进行序列化处理之后,根据所述起始位置将每 个属性信息对应的序列化结果依次保存到所述存储单元中。
[0080]
具体地,对象序列化处理的装置600还可以包括序列化类创建模 块(图中未示出),用于:在从序列化类工厂中未能获取所述对象的 序列化类的情况下,根据所述对象的数据类型创建与所述对象对应的 序列化类并保存到所述序列化类工厂中。
[0081]
具体地,序列化类创建模块(图中未示出),还可以用于:获取 所述对象的属性;将所述对象的属性和对应的属性值存取器进行封装, 创建与所述对象对应的序列化类。
[0082]
具体地,对象序列化处理的装置600还可以包括循环判断模块(图 中未示出),用于:在从序列化类工厂中获取所述对象的序列化类之 后,判断所述对象是否要循环引用所述序列化类。
[0083]
具体地,所述数据类型包括:布尔类型、字节类型、字符类型、 短整型、整数类型、浮点类型、长整型和双精度类型;所述数据类型 转换包括:将布尔类型转换为字节类型、将短整型转换为字符类型、 将浮点类型转换为整数类型、将双精度类型转换为长整型。
[0084]
具体地,所述数据压缩包括:获取数据类型转换后的中间数据的 数据长度,并确定所述数据长度所属的数据长度区间,所述数据长度 区间是基于转换后的数据类型设置的;根据预设的数据长度区间与存 储长度的映射关系,确定所述中间数据存储于所述存储单元所需的存 储长度;将所述中间数据存储于所述存储单元以进行数据压缩。
[0085]
具体地,对象序列化处理的装置600还可以包括容量判断模块(图 中未示出),用于:在将所述中间数据存储于所述存储单元之前,根 据所述中间数据存储于所述存储单元所需的存储长度,和所述存储单 元的可用存储空间,判断所述存储单元是否需要扩容;在
需要扩容的 情况下,扩大所述存储单元的容量。
[0086]
图7是本发明实施例可以应用于其中的示例性系统架构图。
[0087]
如图7所示,系统架构700可以包括终端设备701、702、703,网 络704和服务器705。网络704用以在终端设备701、702、703和服务 器705之间提供通信链路的介质。网络704可以包括各种连接类型, 例如有线、无线通信链路或者光纤电缆等等。
[0088]
用户可以使用终端设备701、702、703通过网络704与服务器705 交互,以接收或发送消息等。终端设备701、702、703上可以安装有 各种通讯客户端应用,例如序列化应用、序列化处理应用等(仅为示例)。
[0089]
终端设备701、702、703可以是具有显示屏并且支持网页浏览的 各种电子设备,包括但不限于智能手机、平板电脑、膝上型便携计算 机和台式计算机等等。
[0090]
服务器705可以是提供各种服务的服务器,例如对用户利用终端 设备701、702、703所进行的序列化提供支持的后台管理服务器(仅为 示例)。后台管理服务器可以根据接收到的序列化请求,获取待序列化 对象和所述对象的数据类型;根据所述对象的数据类型,从序列化类 工厂中获取所述对象的序列化类,其中,所述序列化类工厂存储数据 类型与序列化类之间的映射关系;根据所述对象的序列化类,依次对 所述对象的每个属性信息进行序列化处理,其中,所述序列化处理包 括:数据类型转换和数据压缩,所述属性信息包括属性和属性值的处 理,并将处理结果(例如序列化结果等
‑‑
仅为示例)反馈给终端设备。
[0091]
需要说明的是,本发明实施例所提供的对象序列化处理的方法一 般由服务器705执行,相应地,对象序列化处理的装置一般设置于服 务器705中。
[0092]
应该理解,图7中的终端设备、网络和服务器的数目仅仅是示意 性的。根据实现需要,可以具有任意数目的终端设备、网络和服务器。
[0093]
下面参考图8,其示出了适于用来实现本发明实施例的终端设备或 服务器的计算机系统800的结构示意图。图8示出的终端设备或服务 器仅仅是一个示例,不应对本发明实施例的功能和使用范围带来任何 限制。
[0094]
如图8所示,计算机系统800包括中央处理单元(cpu)801,其 可以根据存储在只读存储器(rom)802中的程序或者从存储部分808 加载到随机访问存储器(ram)803中的程序而执行各种适当的动作 和处理。在ram 803中,还存储有系统800操作所需的各种程序和数 据。cpu 801、rom 802以及ram 803通过总线804彼此相连。输入/ 输出(i/o)接口805也连接至总线804。
[0095]
以下部件连接至i/o接口805:包括键盘、鼠标等的输入部分806; 包括诸如阴极射线管(crt)、液晶显示器(lcd)等以及扬声器等的 输出部分807;包括硬盘等的存储部分808;以及包括诸如lan卡、 调制解调器等的网络接口卡的通信部分809。通信部分809经由诸如因 特网的网络执行通信处理。驱动器810也根据需要连接至i/o接口805。 可拆卸介质811,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据 需要安装在驱动器810上,以便于从其上读出的计算机程序根据需要 被安装入存储部分808。
[0096]
特别地,根据本发明公开的实施例,上文参考流程图描述的过程 可以被实现为计算机软件程序。例如,本发明公开的实施例包括一种 计算机程序产品,其包括承载在计算机可读介质上的计算机程序,该 计算机程序包含用于执行流程图所示的方法的程序代码。在这样的实 施例中,该计算机程序可以通过通信部分809从网络上被下载和安装, 和/或
从可拆卸介质811被安装。在该计算机程序被中央处理单元(cpu) 801执行时,执行本发明的系统中限定的上述功能。
[0097]
需要说明的是,本发明所示的计算机可读介质可以是计算机可读 信号介质或者计算机可读存储介质或者是所述两者的任意组合。计算 机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红 外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机 可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导 线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(ram)、只读 存储器(rom)、可擦式可编程只读存储器(eprom或闪存)、光纤、便 携式紧凑磁盘只读存储器(cd-rom)、光存储器件、磁存储器件、或者 所述的任意合适的组合。在本发明中,计算机可读存储介质可以是任 何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或 者器件使用或者与其结合使用。而在本发明中,计算机可读的信号介 质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载 了计算机可读的程序代码。这种传播的数据信号可以采用多种形式, 包括但不限于电磁信号、光信号或所述的任意合适的组合。计算机可 读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介 质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、 装置或者器件使用或者与其结合使用的程序。计算机可读介质上包含 的程序代码可以用任何适当的介质传输,包括但不限于:无线、电线、 光缆、rf等等,或者所述的任意合适的组合。
[0098]
附图中的流程图和框图,图示了按照本发明各种实施例的系统、 方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点 上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码 的一部分,所述模块、程序段、或代码的一部分包含一个或多个用于 实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的 实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发 生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们 有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的 是,框图或流程图中的每个方框、以及框图或流程图中的方框的组合, 可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者 可以用专用硬件与计算机指令的组合来实现。
[0099]
描述于本发明实施例中所涉及到的单元可以通过软件的方式实现, 也可以通过硬件的方式来实现。所描述的单元也可以设置在处理器中, 例如,可以描述为:一种处理器包括:对象获取模块、序列化类获取 模块和序列化处理模块。
[0100]
其中,这些模块的名称在某种情况下并不构成对该模块本身的限 定,例如,对象获取模块还可以被描述为“用于根据接收到的序列化 请求,获取待序列化对象和所述对象的数据类型的模块”。
[0101]
另一方面,本发明还提供了一种计算机可读介质,该计算机可读 介质可以是所述实施例中描述的设备中所包含的;也可以是单独存在, 而未装配入该设备中。所述计算机可读介质承载有一个或者多个程序, 当所述一个或者多个程序被一个该设备执行时,使得该设备包括:根 据接收到的序列化请求,获取待序列化对象和所述对象的数据类型; 根据所述对象的数据类型,从序列化类工厂中获取所述对象的序列化 类,其中,所述序列化类工厂存储数据类型与序列化类之间的映射关 系;根据所述对象的序列化类,依次对所述对象的每个属性信息进行 序列化处理,其中,所述序列化处理包括:数据类型转换和数据压
缩, 所述属性信息包括属性和属性值。
[0102]
根据本发明实施例的技术方案,具有如下优点或有益效果:通过 根据接收到的序列化请求,获取待序列化对象和对象的数据类型;根 据对象的数据类型,从序列化类工厂中获取对象的序列化类,其中, 序列化类工厂存储数据类型与序列化类之间的映射关系;根据对象的 序列化类,依次对对象的每个属性信息进行序列化处理,其中,序列 化处理包括:数据类型转换和数据压缩,属性信息包括属性和属性值 的技术方案,实现了基于待序列化对象的序列化类的数据类型转换和 数据压缩,有效减少了序列化的数据类型,提升了序列化的速度,缩 减了序列化后的字节数组长度,从而减少了数据存储和网络传输的成 本。
[0103]
所述具体实施方式,并不构成对本发明保护范围的限制。本领域 技术人员应该明白的是,取决于设计要求和其他因素,可以发生各种 各样的修改、组合、子组合和替代。任何在本发明的精神和原则之内 所作的修改、等同替换和改进等,均应包含在本发明保护范围之内。
技术特征:
1.一种对象序列化处理的方法,其特征在于,包括:根据接收到的序列化请求,获取待序列化对象和所述对象的数据类型;根据所述对象的数据类型,从序列化类工厂中获取所述对象的序列化类,其中,所述序列化类工厂存储数据类型与序列化类之间的映射关系;根据所述对象的序列化类,依次对所述对象的每个属性信息进行序列化处理,其中,所述序列化处理包括:数据类型转换和数据压缩,所述属性信息包括属性和属性值。2.根据权利要求1所述的方法,其特征在于,获取待序列化对象和所述对象的数据类型之后,还包括:设置所述对象的序列化结果在存储单元存放的起始位置;校验所述存储单元内的初始数据以及设置所述存储单元的初始长度;在对每个属性信息进行序列化处理之后,还包括:根据所述起始位置将每个属性信息对应的序列化结果依次保存到所述存储单元中。3.根据权利要求1所述的方法,其特征在于,所述方法还包括:在从序列化类工厂中未能获取所述对象的序列化类的情况下,根据所述对象的数据类型创建与所述对象对应的序列化类并保存到所述序列化类工厂中。4.根据权利要求3所述的方法,其特征在于,根据所述对象的数据类型创建与所述对象对应的序列化类,包括:获取所述对象的属性;将所述对象的属性和对应的属性值存取器进行封装,创建与所述对象对应的序列化类。5.根据权利要求1所述的方法,其特征在于,从序列化类工厂中获取所述对象的序列化类之后,还包括:判断所述对象是否要循环引用所述序列化类。6.根据权利要求1所述的方法,其特征在于,所述数据类型包括:布尔类型、字节类型、字符类型、短整型、整数类型、浮点类型、长整型和双精度类型;所述数据类型转换包括:将布尔类型转换为字节类型、将短整型转换为字符类型、将浮点类型转换为整数类型、将双精度类型转换为长整型。7.根据权利要求1或6所述的方法,其特征在于,所述数据压缩包括:获取数据类型转换后的中间数据的数据长度,并确定所述数据长度所属的数据长度区间,所述数据长度区间是基于转换后的数据类型设置的;根据预设的数据长度区间与存储长度的映射关系,确定所述中间数据存储于所述存储单元所需的存储长度;将所述中间数据存储于所述存储单元以进行数据压缩。8.根据权利要求7所述的方法,其特征在于,将所述中间数据存储于所述存储单元之前,还包括:根据所述中间数据存储于所述存储单元所需的存储长度,和所述存储单元的可用存储空间,判断所述存储单元是否需要扩容;在需要扩容的情况下,扩大所述存储单元的容量。
9.一种对象序列化处理的装置,其特征在于,包括:对象获取模块,根据接收到的序列化请求,获取待序列化对象和所述对象的数据类型;序列化类获取模块,根据所述对象的数据类型,从序列化类工厂中获取所述对象的序列化类,其中,所述序列化类工厂存储数据类型与序列化类之间的映射关系;序列化处理模块,根据所述对象的序列化类,依次对所述对象的每个属性信息进行序列化处理,其中,所述序列化处理包括:数据类型转换和数据压缩,所述属性信息包括属性和属性值。10.一种移动电子设备终端,其特征在于,包括:一个或多个处理器;存储装置,用于存储一个或多个程序,当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如权利要求1-8中任一所述的方法。11.一种计算机可读介质,其上存储有计算机程序,其特征在于,所述程序被处理器执行时实现如权利要求1-8中任一所述的方法。
技术总结
本发明公开了一种对象序列化处理的方法和装置,涉及计算机技术领域。该方法的一具体实施方式包括:根据接收到的序列化请求,获取待序列化对象和所述对象的数据类型;根据所述对象的数据类型,从序列化类工厂中获取所述对象的序列化类,其中,所述序列化类工厂存储数据类型与序列化类之间的映射关系;根据所述对象的序列化类,依次对所述对象的每个属性信息进行序列化处理,其中,所述序列化处理包括:数据类型转换和数据压缩,所述属性信息包括属性和属性值。该实施方式实现了基于待序列化对象的序列化类的数据类型转换和数据压缩,提升了序列化的速度,缩减了序列化后的字节数组长度,从而减少了数据存储和网络传输的成本。从而减少了数据存储和网络传输的成本。从而减少了数据存储和网络传输的成本。
技术研发人员:周起仝
受保护的技术使用者:京东科技控股股份有限公司
技术研发日:2022.01.27
技术公布日:2023/8/8
版权声明
本文仅代表作者观点,不代表航空之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)
飞行汽车 https://www.autovtol.com/
上一篇:一种汽车多工位组合式模具的制作方法 下一篇:一种高层建筑施工物料运输车的制作方法
