一种序列化和反序列化方法、装置和电子设备制造方法及图纸

技术编号:32476928 阅读:17 留言:0更新日期:2022-03-02 09:39
本发明专利技术公开了一种序列化和反序列化方法、装置和电子设备,其中序列化方法包括:获取目标内存对象,并实现序列化接口;以JSON数组的数据格式通过序列化接口将删除键值的目标内存对象序列化到目标文件中。本发明专利技术提供的技术方案,在删除元数据键值对的键的情况下,以JSON数组的格式存储数据,保证数据的预设数据结构不变,可以在反序列化时根据预设顺序查询到想要的信息,保证数据信息不丢失的前提下,降低序列化文件的数据量。降低序列化文件的数据量。降低序列化文件的数据量。

【技术实现步骤摘要】
一种序列化和反序列化方法、装置和电子设备


[0001]本专利技术涉及数据处理领域,具体涉及一种序列化和反序列化方法、装置和电子设备。

技术介绍

[0002]在面向对象编程中,编写应用程序时产生的某些数据会存储在内存中,通常根据用户的实际需要,会将其转变为字节流写入某个文件中进行存储或是传输该文件到网络中的另一台计算机上以实现通讯。上述将程序数据转化成能被存储和传输的格式的过程被称为“序列化”,而它的逆过程则可被称为“反序列化”。常用的序列化的数据格式有二进制、XML、JSON对象等,几种格式各有优缺点,针对不同应用场景可以灵活选择。但是使用现有数据格式序列化生成的文件较大,会占用更多的存储资源,并且序列化速度和传输速度较慢。因此,如何在保证数据信息不丢失的前提下,降低序列化文件的数据量是亟待解决的问题。

技术实现思路

[0003]有鉴于此,本专利技术实施方式提供了一种序列化和反序列化方法、装置和电子设备,从而降低了序列化文件的数据量。
[0004]根据第一方面,本专利技术提供了一种序列化方法,所述方法包括:获取目标内存对象,并实现序列化接口;以JSON数组的数据格式通过所述序列化接口将删除键值的所述目标内存对象序列化到目标文件中。
[0005]可选地,若所述目标内存对象存在多层级嵌套,所述通过所述序列化接口将删除键值的所述目标内存对象序列化到目标文件中,包括:通过栈将删除键值的所述目标内存对象各个层级的数据信息依次写入目标JSON数组中,并将所述目标JSON数组转化为字节流存储于所述目标文件中,以完成序列化过程。
[0006]可选地,所述通过栈将删除键值的所述目标内存对象各个层级的数据信息依次写入目标JSON数组中,包括:创建用于存储所述目标内存对象内数据信息的JSON数组,并将所述目标内存对象最外层级的数据信息写入所述JSON数组中;当轮到对下一层级的嵌套对象进行数据信息写入时,将当前层级的JSON数组压入栈中,并在所述当前层级的JSON数组中创建下一层级的JSON数组;将下一层级的嵌套对象内的数据信息写入所述下一层级的JSON数组;重复从所述当轮到对下一层级的嵌套对象进行数据信息写入时,将当前层级的JSON数组压入栈中,并在所述当前层级的JSON数组中创建下一层级的JSON数组的步骤到所述将下一层级的嵌套对象内的数据信息写入所述下一层级的JSON数组的步骤,直至所述目标内存对象内的全部嵌套对象写入到对应的JSON数组中;每当嵌套对象中的数据信息完成写入后,将当前嵌套对象上一层级的JSON数组从栈中取出,并继续将上一层级的剩余数据信息写入上一层级的JSON数组中,直至所述目标内存对象内的全部数据信息写入由各层级JSON数组构成的所述目标JSON数组中。
[0007]可选地,在所述实现序列化接口之前,所述方法还包括:若所述目标内存对象的类
没有预置,则基于开发环境中的辅助工具对目标内存对象的类的序列化接口进行声明和实现;若所述目标内存对象的类已经预置,则返回所述实现序列化接口的步骤。
[0008]可选地,所述开发环境为C++环境,所述辅助工具为宏定义,所述基于开发环境中的辅助工具对所述类的序列化接口进行声明和实现,包括:通过宏DECLARE_SERIAL对所述目标内存对象的类进行序列化接口声明;通过宏IMPLEMENT_SERIAL使已声明的序列化接口生效,以完成序列化接口实现。
[0009]根据第二方面,本专利技术提供了一种反序列化方法,所述方法包括:创建JSON数组,并将通过第一方面任意一项所述方法得到的目标文件加载到所述JSON数组中;通过序列化接口将所述JSON数组反序列化到内存中生成目标内存对象,并根据所述目标内存对象内数据信息的顺序获取目标键值所对应的数据信息。
[0010]可选地,若所述JSON数组存在多层级嵌套,所述将通过第一方面任意一项所述方法得到的目标文件加载到所述JSON数组中,包括:通过栈将所述JSON数组各个层级的数据信息依次写入所述目标内存对象中,以完成反序列化过程。
[0011]可选地,所述通过栈将所述JSON数组各个层级的数据信息依次写入所述目标内存对象中,包括:创建用于存储所述JSON数组内数据信息的内存对象,并将所述JSON数组最外层级的数据信息写入所述内存对象中;当轮到对下一层级的嵌套数组进行数据信息写入时,将当前层级的内存对象压入栈中,并在所述当前层级的内存对象中创建下一层级的内存对象;将下一层级的JSON数组内的数据信息写入所述下一层级的内存对象;重复从所述当轮到对下一层级的嵌套数组进行数据信息写入时,将当前层级的内存对象压入栈中,并在所述当前层级的内存对象中创建下一层级的内存对象的步骤到所述将下一层级的JSON数组内的数据信息写入所述下一层级的内存对象的步骤,直至所述JSON数组内的全部嵌套数组写入到对应的内存对象中;每当嵌套数组中的数据信息完成写入后,将当前嵌套数组上一层级的内存对象从栈中取出,并继续将上一层级的剩余数据信息写入上一层级的内存对象中,直至所述JSON数组内的全部数据信息写入由各层级内存对象构成的所述目标内存对象中。
[0012]根据第三方面,本专利技术提供了一种序列化装置,所述装置包括:初始化模块,用于获取目标内存对象,并实现序列化接口;序列化模块,用于以JSON数组的数据格式通过所述序列化接口将删除键值的所述目标内存对象序列化到目标文件中。
[0013]根据第四方面,本专利技术提供了一种反序列化装置,所述装置包括:加载模块,用于创建JSON数组,并将通过第一方面任意一项所述方法得到的目标文件加载到所述JSON数组中;反序列化模块,用于通过序列化接口将所述JSON数组反序列化到内存中生成目标内存对象,并根据所述目标内存对象内数据信息的顺序获取目标键值所对应的数据信息。
[0014]根据第五方面,本专利技术实施例提供了一种电子设备,包括:存储器和处理器,所述存储器和所述处理器之间互相通信连接,所述存储器中存储有计算机指令,所述处理器通过执行所述计算机指令,从而执行第一方面、第二方面、第一方面任意一种可选实施方式或者第二方面任意一种可选实施方式中所述的方法。
[0015]根据第六方面,本专利技术实施例提供了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机指令,所述计算机指令用于使所述计算机从而执行第一方面、第二方面、第一方面任意一种可选实施方式或者第二方面任意一种可选实施方式中所述的方
法。
[0016]本申请提供的技术方案,具有如下优点:
[0017]本申请提供的一种序列化方法,首先将内存对象中键值对形式数据的键值删除,保留剩下的与键值所对应的值,按照预设顺序以JSON数组的格式序列化到目标文件中,从而大大降低了序列化文件的数据量,节省了物理存储资源。
[0018]此外,针对多层级嵌套的内存对象,通过栈的特性将各层数据以数据结构不改变的方式写入JSON数组中,进一步保证了JSON数组中数据顺序的准确性。并且,如果目标内存对象的类没有预置在开发环境中,则基于开发环本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种序列化方法,其特征在于,所述方法包括:获取目标内存对象,并实现序列化接口;以JSON数组的数据格式通过所述序列化接口将删除键值的所述目标内存对象序列化到目标文件中。2.根据权利要求1所述的方法,其特征在于,若所述目标内存对象存在多层级嵌套,所述通过所述序列化接口将删除键值的所述目标内存对象序列化到目标文件中,包括:通过栈将删除键值的所述目标内存对象各个层级的数据信息依次写入目标JSON数组中,并将所述目标JSON数组转化为字节流存储于所述目标文件中,以完成序列化过程。3.根据权利要求2所述的方法,其特征在于,所述通过栈将删除键值的所述目标内存对象各个层级的数据信息依次写入目标JSON数组中,包括:创建用于存储所述目标内存对象内数据信息的JSON数组,并将所述目标内存对象最外层级的数据信息写入所述JSON数组中;当轮到对下一层级的嵌套对象进行数据信息写入时,将当前层级的JSON数组压入栈中,并在所述当前层级的JSON数组中创建下一层级的JSON数组;将下一层级的嵌套对象内的数据信息写入所述下一层级的JSON数组;重复从所述当轮到对下一层级的嵌套对象进行数据信息写入时,将当前层级的JSON数组压入栈中,并在所述当前层级的JSON数组中创建下一层级的JSON数组的步骤到所述将下一层级的嵌套对象内的数据信息写入所述下一层级的JSON数组的步骤,直至所述目标内存对象内的全部嵌套对象写入到对应的JSON数组中;每当嵌套对象中的数据信息完成写入后,将当前嵌套对象上一层级的JSON数组从栈中取出,并继续将上一层级的剩余数据信息写入上一层级的JSON数组中,直至所述目标内存对象内的全部数据信息写入由各层级JSON数组构成的所述目标JSON数组中。4.根据权利要求3所述的方法,其特征在于,在所述实现序列化接口之前,所述方法还包括:若所述目标内存对象的类没有预置,则基于开发环境中的辅助工具对目标内存对象的类的序列化接口进行声明和实现;若所述目标内存对象的类已经预置,则返回所述实现序列化接口的步骤。5.根据权利要求4所述的方法,其特征在于,所述开发环境为C++环境,所述辅助工具为宏定义,所述基于开发环境中的辅助工具对所述类的序列化接口进行声明和实现,包括:通过宏DECLARE_SERIAL对所述目标内存对象的类进行序列化接口声明;通过宏IMPLEMENT_SERIAL使已声明的序列化接口生效,以完成序列化接口实现。6.一种反序列化方法...

【专利技术属性】
技术研发人员:冯刚义
申请(专利权)人:北京力控元通科技有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1