CN111241346B - 一种对象序列化方法、装置、机器可读介质以及系统 - Google Patents
一种对象序列化方法、装置、机器可读介质以及系统 Download PDFInfo
- Publication number
- CN111241346B CN111241346B CN202010042730.3A CN202010042730A CN111241346B CN 111241346 B CN111241346 B CN 111241346B CN 202010042730 A CN202010042730 A CN 202010042730A CN 111241346 B CN111241346 B CN 111241346B
- Authority
- CN
- China
- Prior art keywords
- attribute
- type
- serialization
- wrapper
- name
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
- 238000000034 method Methods 0.000 title claims abstract description 62
- 238000004806 packaging method and process Methods 0.000 claims abstract description 32
- 230000015654 memory Effects 0.000 claims description 29
- 238000006243 chemical reaction Methods 0.000 claims description 5
- 230000005540 biological transmission Effects 0.000 abstract description 2
- 230000000875 corresponding effect Effects 0.000 description 64
- 238000010586 diagram Methods 0.000 description 8
- 230000007246 mechanism Effects 0.000 description 3
- 230000003287 optical effect Effects 0.000 description 3
- 230000002093 peripheral effect Effects 0.000 description 3
- 238000012545 processing Methods 0.000 description 3
- 238000004891 communication Methods 0.000 description 2
- 230000002596 correlated effect Effects 0.000 description 2
- 238000011161 development Methods 0.000 description 2
- 230000006870 function Effects 0.000 description 2
- 239000003795 chemical substances by application Substances 0.000 description 1
- 230000006835 compression Effects 0.000 description 1
- 238000007906 compression Methods 0.000 description 1
- 238000004590 computer program Methods 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 230000007613 environmental effect Effects 0.000 description 1
- 238000007667 floating Methods 0.000 description 1
- 238000009434 installation Methods 0.000 description 1
- 239000004973 liquid crystal related substance Substances 0.000 description 1
- 230000000644 propagated effect Effects 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/80—Information retrieval; Database structures therefor; File system structures therefor of semi-structured data, e.g. markup language structured data such as SGML, XML or HTML
- G06F16/84—Mapping; Conversion
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/448—Execution paradigms, e.g. implementations of programming paradigms
- G06F9/4488—Object-oriented
- G06F9/4493—Object persistence
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明涉及计算机技术领域,特别地公开了一种对象序列化方法、装置、机器可读介质以及系统。该对象序列化方法,包括:获取对象的至少一个属性,属性包括属性名、属性类型和属性值;根据对象创建包装对象,包装对象的每个属性中的属性名和属性值与对象的相应属性的属性名和属性值相同,而对于包装对象的每个属性的属性类型:在对象的相应属性的属性类型为预设的序列化类型的情况下,包装对象的属性类型与对象的属性类型相同;在对象的相应属性的属性类型不是预设的序列化类型的情况下,包装对象的属性类型为与对象的属性类型对应的预设序列化类型;序列化包装对象。序列化后的对象占用存储空间的大小,提高网络传输速度,提高了应用的整体性能。
Description
技术领域
本发明涉及计算机技术领域,特别地公开了一种对象序列化方法、装置、机器可读介质以及系统。
背景技术
序列化(Serialization)是一种将对象的状态信息转换为可以存储或传输的形式的过程。在该过程中,首先将序列化的结果写入缓冲区,再将缓冲区中的内容输出或写入磁盘。基于目前的应用场景,序列化的转换形式主要包括Json对象简谱、Xml可扩展标记语言、Binary二进制串等。在云计算及高性能计算领域,序列化的性能通常会对系统的计算性能造成很大的影响。
现有的对象序列化技术,大多数情况为了可读性都会选择Jackson或Fastjson等框架将对象序列化成Json格式,对象序列化后的字节大小较大,序列化/反序列的性能也不高。Protostuff等框架序列化/反序列性能较好,能有效降低对CPU资源的消耗。但是对复杂类创建的对象(类有继承、属性中有其他类嵌套、属性有日期、包装类等特殊类型)序列化又会产生膨胀问题,序列化后的字节大小比序列化成Json格式更大。
发明内容
本申请实施例提供了一种对象序列化方法,包括:
获取对象的至少一个属性,属性包括属性名、属性类型和属性值;
根据对象创建包装对象,包装对象的每个属性中的属性名和属性值与对象的相应属性的属性名和属性值相同,而对于包装对象的每个属性的属性类型:
在对象的相应属性的属性类型为预设的序列化类型的情况下,包装对象的属性类型与对象的属性类型相同;
在对象的相应属性的属性类型不是预设的序列化类型的情况下,包装对象的属性类型为与对象的属性类型对应的预设序列化类型;
序列化包装对象。
可选地,根据对象创建包装对象,还包括:
在对象包含继承关系的情况下,于创建的包装对象中去除继承关系。
可选地,还包括:
序列化类型包括执行序列化方法的编程语言的内置类型。
可选地,序列化类型还包括:字符串类型,日期类型,集合类型和/或自定义类型中的至少一种。
可选地,还包括:
在对象的属性类型是日期类型的情况下,包装对象中对应的序列化类型为字符串类型。
可选地,还包括:
将包装类型的属性类型转换成包装类型对应的基本类型。
本申请还提供了一种对象反序列化方法,包括:
获取已序列化的对象的数据,基于数据获取对象的属性,属性包括属性名,序列化类型,属性值;
从预先配置的序列化类型与属性类型的对应关系中,获取与对象的序列化类型对应的属性类型;
根据序列化类型对应的属性类型,属性名建立对象,基于属性值对对象赋值。
可选地,还包括:
在对象的数据包含继承关系的情况下,于对象中添加继承关系。
本申请还提供了一种对象序列化装置,包括:
获取模块,获取模块用于获取对象的至少一个属性,属性包括属性名、属性类型和属性值;
创建模块,创建模块用于根据对象创建包装对象,包装对象的每个属性中的属性名和属性值与对象的相应属性的属性名和属性值相同,而对于包装对象的每个属性的属性类型:
在对象的相应属性的属性类型为预设的序列化类型的情况下,包装对象的属性类型与对象的属性类型相同;
在对象的相应属性的属性类型不是预设的序列化类型的情况下,包装对象的属性类型为与对象的属性类型对应的预设序列化类型;
序列化模块,序列化模块用于序列化包装对象。
可选地,创建模块根据对象创建包装对象,还包括:
创建模块用于在对象包含继承关系的情况下,于创建的包装对象中去除继承关系。
可选地,还包括:
创建模块用于配置序列化类型,包括执行序列化方法的编程语言的内置类型。
可选地,
创建模块还用于配置序列化类型,包括:字符串类型,日期类型,集合类型和/或自定义类型中的至少一种。
可选地,还包括:
创建模块用于在对象的属性类型是日期类型的情况下,包装对象中对应的序列化类型为字符串类型。
可选地,还包括:
创建模块用于将包装类型的属性类型转换成包装类型对应的基本类型。
本申请还提供了一种对象反序列化装置,包括:
获取模块,获取模块用于获取已序列化的对象的数据,基于数据获取对象的属性,属性包括属性名,序列化类型,属性值;
转换模块,转换模块用于从预先配置的序列化类型与属性类型的对应关系中,获取与对象的序列化类型对应的属性类型;
反序列化模块,反序列化模块用于根据序列化类型对应的属性类型,属性名建立对象,基于属性值对对象赋值。
可选地,还包括:
反序列化模块用于在对象的数据包含继承关系的情况下,于对象中添加继承关系。
本申请还提供了一种机器可读介质,机器可读介质上存储有指令,该指令在机器上执行时使机器执行上述的对象序列化方法。
本申请还提供了一种系统,包括:
存储器,用于存储由系统的一个或多个处理器执行的指令,以及
处理器,是系统的处理器之一,用于执行上述的对象序列化方法。
本申请的方法压缩了序列化后对象占用存储空间的大小,提高网络传输速度,提高了应用的整体性能。
附图说明
图1根据本申请的一些实施例,示出了一种对象序列化方法的流程示意图。
图2根据本申请的一些实施例,示出了一种对象反序列化的流程示意图。
图3根据本申请的一些实施例,示出了一种对象序列化装置的结构示意图。
图4根据本申请的一些实施例,示出了一种对象反序列化装置的结构示意图。
图5根据本申请的一些实施例,示出了一种系统的框图。
图6根据本申请一些实施例,示出了一种片上系统(SoC)的框图。
具体实施例
可以理解,如本文所使用的,术语“模块””可以指代或者包括专用集成电路(ASIC)、电子电路、执行一个或多个软件或固件程序的处理器(共享、专用、或群组)和/或存储器、组合逻辑电路、和/或提供所描述的功能的其他适当硬件组件,或者可以作为这些硬件组件的一部分。
可以理解,在本申请各实施例中,处理器可以是微处理器、数字信号处理器、微控制器等,和/或其任何组合。根据另一个方面,所述处理器可以是单核处理器,多核处理器等,和/或其任何组合。
下面将结合附图对本申请的实施例作进一步地详细描述。
根据本申请的一些实施例公开了以及一种对象序列化方法、对象反序列化方法、对象序列化装置、对象反序列化装置、机器可读介质以及系统。
通常,在序列化过程中,任意自定义对象或者非自定义的对象包括至少一个属性,属性的名称即属性名称,属性对应的值即属性值,属性的类型即属性类型可以为整型,字符型,浮点型,布尔型等程序设计语言支持的基本类型,还可以时非基本类型,常见的非基本类型可以为字符串型,日期型等。如果属性类型为非基本类型,则可对该属性进行转换,例如,将日期类型转换为字符串类型,虽然字符串类型也是非基本类型,但是系统对于字符串类型的处理速度要快于日期类型。
本申请的实施例可以识别对象数据中所有待序列化对象的属性类型,并针对对象中的一些属性类型,自动转换成对应的序列化类型;在另一些例子中,也可以是针对部分属性类型,例如集合类型或者自定义类型,预先配置有对应的序列化类型,此类属性类型可以是具有除了编程语言内置类型之外的其他类型。以Java语言为例,内置类型可以包括BigDecimal、Integer、boolean、Boolean、byte、Byte、Character、double、Double、float、Float、int、Integer、java.sql.Date、java.sql.Time、java.sql.Timestamp、java.util.Date、long、Long、shortShort或String等。当然,上述示例以Java语言为例,对于采用其他编程语言的对象数据,可以根据实际编程语言的内置类型而灵活配置。
下面结合图1介绍根据本发明的一些实施例的对象序列化方法。如图1所示,该对象序列化方法可以包括:
101:获取对象的至少一个属性,属性包括属性名、属性类型和属性值。
通常,生成并获取对象的方式有很多,例如,从数据库中读取字段名和字段值并转换成对象,或者直接从文本文件中生成,根据本申请的一些实施例,以XML格式生成对象,XML格式是计算机开发中常用的数据格式,可以根据XML数据规范,从XML数据以及schema中提取获取对象的属性名,属性类型,属性值以及对象的描述信息,这里的描述信息可以是对象名,所在的域等信息。根据从XML数据中提取的数据信息和描述信息,自动地生成对象。
根据本申请的一些实施例,描述人(Person)的XML数据的根节点为Person,与它相应的各级元素分别为Name和Birthday,其中,Name和Birthday对应属性名,各级元素的属性类型可以为String、Date,属性值则可以是XXX和1980-01-01。根据XML数据规范,分层级地从XML数据中提取根节点Person以及元素Name和Birthday的属性值和属性类型。
102:根据对象创建包装对象,包装对象的每个属性中的属性名和属性值与对象的相应属性的属性名和属性值相同,而对于包装对象的每个属性的属性类型。其中,在对象的相应属性的属性类型为预设的序列化类型的情况下,包装对象的属性类型与对象的属性类型相同;在对象的相应属性的属性类型不是预设的序列化类型的情况下,包装对象的属性类型为与对象的属性类型对应的预设序列化类型。
根据本申请的一些实施例,可以遍历对象获取该对象的属性名,属性值和属性类型,创建与该对象的结构一致的包装对象,将该对象的属性名和属性值复制到该包装对象的属性名和属性值,对于对象的属性名,属性值和属性类型的处理,包括当遍历到对象的属性类型为内置类型/基本类型时,直接将该属性名和属性值以及属性类型复制到该包装对象;当遍历到对象的属性类型为非基本类型时,则依据该非基本类型对应的序列化类型,可以预先配置与对象的属性类型对应的序列化类型,属性类型与序列化类型具有一一对应的关系,将包装对象中的属性性类变换成该序列化类型。其中,如果该属性是对象类型,则重复执行上述操作,对该对象包含的子属性逐一处理,得到其子属性的属性名称,属性值,属性类型,同时还要获取该子属性对应的父属性之间的关系。之后判断子属性为基本类型还是非基本类型,循环重复执行上述步骤,直到所有属性都处理完毕。
其中,如果该属性是对象类型,则重复执行上述操作,对该对象包含的子属性逐一处理,得到其子属性的属性名称,属性值,属性类型,同时还要获取该子属性对应的父属性之间的关系。之后判断子属性为基本类型还是非基本类型,循环重复执行上述步骤,直到所有属性都处理完毕。
根据本申请的一些实施例,例如,在对象包含继承关系的情况下,于包装对象中去除该述继承关系。对象Manager的定义为public class Manager extends Employee{},其中对象Manager包含继承关系,在这种情况下,在生成的包装对象中去除该继承关系,publicclass ManagerWrapper implements Serializable{}。
根据本申请的一些实施例,例如,在对象的属性类型是日期类型的情况下,配置对象的包装对象中对应的序列化类型为字符串类型。对象Person的定义为public classPerson implements Serializable{private String name;private Date birthday;}其中,name为字符串类型String,birthday为日期类型,该属性类型属于内置类型,在生成对象的包装对象后,将对该属性类型进行转换,配置对象的包装对象中对应的序列化类型为字符串类型。包装对象的定义public class PersonWrapper implements Serializable{private String name;private String birthday;}。包装对象PersonWrapper中birthday的方式包括但不限于SimpleDateFormat format=new SimpleDateFormat(“yyyy-MM-dd'T'HH:mm:ss.SSSZ”,Locale.ENGLISH);PersonWrapper.birthday=format.format(Person.birthday)。
根据本申请的一些实施例,可以将包装类型的属性类型转换成包装类型对应的基本类型。对象Employee的定义为public class Employee implements Serializable{private String name;private Interger salary;}其中,salary为整型包装类型,需要将包装类型的属性类型转换成包装类型对应的基本类型。包装对象public classEmployeeWrapper implements Serializable{private String name;private intsalary;}EmployeeWrapper.salary=Employee.salary.intValue()。
对象Employee的定义为public class Company implements Serializable{private String name;private List<String>empNo;}其中,empNo为集合类型,在序列化这些无法直接序列化/反序列化的属性类型时,可以配置与属性类型对应的序列化类型后,加入到包装对象中来把属性值包装一下,然后对这个包装对象进行序列化/反序列化。具体地,在包装对象中配置与集合相关的类型,WRAPPER_SET.add(List.class);后,CompanyWrapper可以被正常序列化。
103:序列化包装对象。具体地,对该包装对象中的属性逐一执行序列化,当属性类型为基本类型或者序列化类型时,对该属性的属性值进行序列化操作,当属性类型为对象类型时,则循环处理该属性的各个子属性,获取到的子属性为基本类型时,序列化该子属性,将序列化后的属性值和对应的属性名称组成键值对,同时,对于子属性的属性类型为对象类型时,进一步依次循环获取该子属性的下一级属性的属性类型,直到得到属性类型为基本类型或者序列化类型的属性后,执行序列化,并将序列化后的属性值和对应的属性名称组成键值对,再继续下一步判断。
根据本申请的一些实施例,可以将包装对象通过Protostuff工具进行序列化。Protostuff工具提供了多种语言的实现:java、c++、go和python且占用小,速度快。Protostuff工具序列化包装对象的技术为现有技术,这里不再一一赘述。
下面结合图2介绍根据本发明的一些实施例的对象反序列化方法。如图2所示,该对象反序列化方法可以包括:
201:获取已序列化的对象的数据,基于数据获取对象的属性,属性包括属性名,序列化类型,属性值;根据本申请的一些实施例,基于序列化后的对象的数据获取未序列化的对象的属性,其中,序列化前的属性名,序列化类型,属性值在该对象的数据中采用相互关联的方式存储。例如,Person{"_class":"String","Name":"XXX","_class":"Date""Birthday":"1980-01-01"},因此可以获取Person对象对应的属性名Name,属性值XXX,序列化类型,属性名Birthday,属性值1980-01-01。
202:从预先配置的序列化类型与属性类型的对应关系中,获取与所述对象的序列化类型对应的属性类型。
203:根据所述序列化类型对应的所述属性类型,所述属性名建立所述对象,基于所述属性值对所述对象赋值。
根据本申请的一些实施例,针对对象中的一些属性类型配置有对应的序列化类型。例如集合类型或者自定义类型,此类属性类型可以是具有除了编程语言内置类型之外的其他类型。
接着,可以依据获取到的该对象的属性,创建该对象,将该对象的属性名和属性类型以从上述序列化数据中获取的属性名,以及依据上述步骤中获取的序列化类型对应的属性类型为准,在该对象创建完毕后,对每个属性按照属性值进行赋值。
根据本申请的一些实施例,在对象的数据包含继承关系的情况下,于对象中添加继承关系。在执行序列化操作前,对象具有继承关系,在从对象转换成包装对象时,去除了该继承关系,在从序列化后的数据反序列化还原生成该对象后,要恢复该对象原本的继承关系。例如,在从序列化后的数据反序列化得到对象Manager的同时,对象Manager的继承关系,public class Manager extends Employee{},其中对象Manager包含继承关系。
基于上面的描述,下面具体介绍对象序列化装置中各模块的主要工作流程。
根据本申请的一些实施例,结合上述对象序列化方法的描述,对于对象序列化装置的工作流程,上述对象序列化方法中描述的技术细节在此流程中依然适用,为了避免重复,有些在此次不再赘述。如图3所示,具体地,一种对象序列化装置包括:
获取模块,获取模块用于获取对象的至少一个属性,属性包括属性名、属性类型和属性值。
根据本申请的一些实施例,获取模块用于从数据库中读取字段名和字段值并转换成对象,或者直接从文本文件中生成,获取模块以XML格式生成对象,XML格式是计算机开发中常用的数据格式,可以根据XML数据规范,从XML数据以及schema中提取获取对象的属性名,属性类型,属性值以及对象的描述信息,这里的描述信息可以是对象名,所在的域等信息。根据从XML数据中提取的数据信息和描述信息,自动地生成对象。
创建模块,创建模块用于根据对象创建包装对象,包装对象的每个属性中的属性名和属性值与对象的相应属性的属性名和属性值相同,而对于包装对象的每个属性的属性类型:在对象的相应属性的属性类型为预设的序列化类型的情况下,包装对象的属性类型与对象的属性类型相同;在对象的相应属性的属性类型不是预设的序列化类型的情况下,包装对象的属性类型为与对象的属性类型对应的预设序列化类型。
根据本申请的一些实施例,创建模块可以遍历对象获取该对象的属性名,属性值和属性类型,创建与该对象的结构一致的包装对象,将该对象的属性名和属性值复制到该包装对象的属性名和属性值,对于对象的属性名,属性值和属性类型的处理,包括当遍历到对象的属性类型为内置类型/基本类型时,直接将该属性名和属性值以及属性类型复制到该包装对象;当遍历到对象的属性类型为非基本类型时,则依据该非基本类型对应的序列化类型,可以预先配置与对象的属性类型对应的序列化类型,属性类型与序列化类型具有一一对应的关系,将包装对象中的属性性类变换成该序列化类型。其中,如果该属性是对象类型,则重复执行上述操作,对该对象包含的子属性逐一处理,得到其子属性的属性名称,属性值,属性类型,同时还要获取该子属性对应的父属性之间的关系。之后判断子属性为基本类型还是非基本类型,循环重复执行上述步骤,直到所有属性都处理完毕。
序列化模块,序列化模块用于序列化包装对象。
根据本申请的一些实施例,序列化模块对该包装对象中的属性逐一执行序列化,当属性类型为基本类型或者序列化类型时,对该属性的属性值进行序列化操作,当属性类型为对象类型时,则循环处理该属性的各个子属性,获取到的子属性为基本类型时,序列化该子属性,将序列化后的属性值和对应的属性名称组成键值对,同时,对于子属性的属性类型为对象类型时,进一步依次循环获取该子属性的下一级属性的属性类型,直到得到属性类型为基本类型或者序列化类型的属性后,执行序列化,并将序列化后的属性值和对应的属性名称组成键值对,再继续下一步判断。
创建模块用于在对象包含继承关系的情况下,于创建的包装对象中去除继承关系。
根据本申请的一些实施例,在执行序列化操作前,对象具有继承关系,在从对象转换成包装对象时,创建模块去除该继承关系。
创建模块用于配置序列化类型,包括执行序列化方法的编程语言的内置类型。根据本申请的一些实施例,创建模块针对对象中的一些属性类型,自动转换成对应的序列化类型;在另一些例子中,也可以是针对部分属性类型,例如集合类型或者自定义类型,预先配置有对应的序列化类型,此类属性类型可以是具有除了编程语言内置类型之外的其他类型。
创建模块还用于配置序列化类型,包括:字符串类型,日期类型,集合类型和/或自定义类型中的至少一种。创建模块用于在对象的属性类型是日期类型的情况下,包装对象中对应的序列化类型为字符串类型。
根据本申请的一些实施例,例如,在对象的属性类型是日期类型的情况下,创建模块配置对象的包装对象中对应的序列化类型为字符串类型,在本实施例的编程语言中,日期类型属于内置类型,在生成对象的包装对象后,将对该属性类型进行转换,配置对象的包装对象中对应的序列化类型为字符串类型。
创建模块用于将包装类型的属性类型转换成包装类型对应的基本类型。根据本申请的一些实施例,为当属性类型为整型包装类型,需要将包装类型的属性类型转换成包装类型对应的基本类型,从整型包装类型转换为整型。
根据本申请的一些实施例,结合上述对象反序列化方法的描述,对于对象反序列化装置的工作流程,上述对象反序列化方法中描述的技术细节在此流程中依然适用,为了避免重复,有些在此次不再赘述。如图4所示,本申请还提供了一种对象反序列化装置,包括:
获取模块,获取模块用于获取已序列化的对象的数据,基于数据获取对象的属性,属性包括属性名,序列化类型,属性值。
根据本申请的一些实施例,获取模块获取已序列化的对象的数据,基于数据获取对象的属性,属性包括属性名,序列化类型,属性值;根据本申请的一些实施例,基于序列化后的对象的数据获取未序列化的对象的属性,其中,序列化前的属性名,序列化类型,属性值在该对象的数据中采用相互关联的方式存储。
转换模块,转换模块用于从预先配置的序列化类型与属性类型的对应关系中,获取与对象的序列化类型对应的属性类型。
反序列化模块,反序列化模块用于根据序列化类型对应的属性类型,属性名建立对象,基于属性值对对象赋值。
根据本申请的一些实施例,转换模块针对对象中的一些属性类型配置有对应的序列化类型。例如集合类型或者自定义类型,此类属性类型可以是具有除了编程语言内置类型之外的其他类型。
接着,反序列化模块可以依据获取到的该对象的属性,创建该对象,将该对象的属性名和属性类型以从上述序列化数据中获取的属性名,以及依据上述步骤中获取的序列化类型对应的属性类型为准,在该对象创建完毕后,对每个属性按照属性值进行赋值。
反序列化模块用于在对象的数据包含继承关系的情况下,于对象中添加继承关系。根据本申请的一些实施例,反序列化模块在对象的数据包含继承关系的情况下,于对象中添加继承关系。在执行序列化操作前,对象具有继承关系,在从对象转换成包装对象时,去除了该继承关系,在从序列化后的数据反序列化还原生成该对象后,要恢复该对象原本的继承关系。
本申请还提供了一种机器可读介质,机器可读介质上存储有指令,该指令在机器上执行时使机器执行上述对象序列化方法。
本申请实施例还提供了一种系统,包括:
存储器,用于存储由系统的一个或多个处理器执行的指令,以及
处理器,是系统的处理器之一,用于执行上述的对象序列化方法。
现在参考图5,所示为根据本申请的一个实施例的系统500的框图。图5示意性地示出了根据多个实施例的示例系统500。在一个实施例中,系统500可以包括一个或多个处理器504,与处理器504中的至少一个连接的系统控制逻辑508,与系统控制逻辑508连接的系统内存512,与系统控制逻辑508连接的非易失性存储器(NVM)516,以及与系统控制逻辑508连接的网络接口520。
在一些实施例中,处理器504可以包括一个或多个单核或多核处理器。在一些实施例中,处理器504可以包括通用处理器和专用处理器(例如,图形处理器,应用处理器,基带处理器等)的任意组合。在系统500采用eNB(Evolved Node B,增强型基站)101或RAN(RadioAccess Network,无线接入网)控制器102的实施例中,处理器504可以被配置为执行各种符合的实施例,例如,如图1所示的实施例中的一个或多个。
在一些实施例中,系统控制逻辑508可以包括任意合适的接口控制器,以向处理器504中的至少一个和/或与系统控制逻辑508通信的任意合适的设备或组件提供任意合适的接口。
在一些实施例中,系统控制逻辑508可以包括一个或多个存储器控制器,以提供连接到系统内存512的接口。系统内存512可以用于加载以及存储数据和/或指令。在一些实施例中系统500的内存512可以包括任意合适的易失性存储器,例如合适的动态随机存取存储器(DRAM)。
NVM/存储器516可以包括用于存储数据和/或指令的一个或多个有形的、非暂时性的计算机可读介质。在一些实施例中,NVM/存储器516可以包括闪存等任意合适的非易失性存储器和/或任意合适的非易失性存储设备,例如HDD(Hard Disk Drive,硬盘驱动器),CD(Compact Disc,光盘)驱动器,DVD(Digital Versatile Disc,数字通用光盘)驱动器中的至少一个。
NVM/存储器516可以包括安装系统500的装置上的一部分存储资源,或者它可以由设备访问,但不一定是设备的一部分。例如,可以经由网络接口520通过网络访问NVM/存储516。
特别地,系统内存512和NVM/存储器516可以分别包括:指令524的暂时副本和永久副本。指令524可以包括:由处理器504中的至少一个执行时导致系统500实施如图1所示方法的指令。在一些实施例中,指令524、硬件、固件和/或其软件组件可另外地/替代地置于系统控制逻辑508,网络接口520和/或处理器504中。
网络接口520可以包括收发器,用于为系统500提供无线电接口,进而通过一个或多个网络与任意其他合适的设备(如前端模块,天线等)进行通信。在一些实施例中,网络接口520可以集成于系统500的其他组件。例如,网络接口520可以集成于处理器504的,系统内存512,NVM/存储器516,和具有指令的固件设备(未示出)中的至少一种,当处理器504中的至少一个执行所述指令时,系统500实现如图1所示的方法。
网络接口520可以进一步包括任意合适的硬件和/或固件,以提供多输入多输出无线电接口。例如,网络接口520可以是网络适配器,无线网络适配器,电话调制解调器和/或无线调制解调器。
在一个实施例中,处理器504中的至少一个可以与用于系统控制逻辑508的一个或多个控制器的逻辑封装在一起,以形成系统封装(SiP)。在一个实施例中,处理器504中的至少一个可以与用于系统控制逻辑508的一个或多个控制器的逻辑集成在同一管芯上,以形成片上系统(SoC)。
系统500可以进一步包括:输入/输出(I/O)设备532。I/O设备532可以包括用户界面,使得用户能够与系统500进行交互;外围组件接口的设计使得外围组件也能够与系统500交互。在一些实施例中,系统500还包括传感器,用于确定与系统500相关的环境条件和位置信息的至少一种。
在一些实施例中,用户界面可包括但不限于显示器(例如,液晶显示器,触摸屏显示器等),扬声器,麦克风,一个或多个相机(例如,静止图像照相机和/或摄像机),手电筒(例如,发光二极管闪光灯)和键盘。
在一些实施例中,外围组件接口可以包括但不限于非易失性存储器端口、音频插孔和电源接口。
在一些实施例中,传感器可包括但不限于陀螺仪传感器,加速度计,近程传感器,环境光线传感器和定位单元。定位单元还可以是网络接口520的一部分或与网络接口520交互,以与定位网络的组件(例如,全球定位系统(GPS)卫星)进行通信。
根据本申请的实施例,图6示出了一种SoC(System on Chip,片上系统)600的框图。在图6中,相似的部件具有同样的附图标记。另外,虚线框是更先进的SoC的可选特征。在图6中,SoC 600包括:互连单元650,其被耦合至应用处理器615;系统代理单元670;总线控制器单元680;集成存储器控制器单元640;一组或一个或多个协处理器620,其可包括集成图形逻辑、图像处理器、音频处理器和视频处理器;静态随机存取存储器(SRAM)单元630;直接存储器存取(DMA)单元660。在一个实施例中,协处理器620包括专用处理器,诸如例如网络或通信处理器、压缩引擎、GPGPU、高吞吐量MIC处理器、或嵌入式处理器等等。
本申请公开的机制的各实施例可以被实现在硬件、软件、固件或这些实现方法的组合中。本申请的实施例可实现为在可编程系统上执行的计算机程序或程序代码,该可编程系统包括至少一个处理器、存储系统(包括易失性和非易失性存储器和/或存储元件)、至少一个输入设备以及至少一个输出设备。
可将程序代码应用于输入指令,以执行本申请描述的各功能并生成输出信息。可以按已知方式将输出信息应用于一个或多个输出设备。为了本申请的目的,处理系统包括具有诸如例如数字信号处理器(DSP)、微控制器、专用集成电路(ASIC)或微处理器之类的处理器的任何系统。
程序代码可以用高级程序化语言或面向对象的编程语言来实现,以便与处理系统通信。在需要时,也可用汇编语言或机器语言来实现程序代码。事实上,本申请中描述的机制不限于任何特定编程语言的范围。在任一情形下,该语言可以是编译语言或解释语言。
在一些情况下,所公开的实施例可以以硬件、固件、软件或其任何组合来实现。所公开的实施例还可以被实现为由一个或多个暂时或非暂时性机器可读(例如,计算机可读)存储介质承载或存储在其上的指令,其可以由一个或多个处理器读取和执行。例如,指令可以通过网络或通过其他计算机可读介质分发。因此,机器可读介质可以包括用于以机器(例如,计算机)可读的形式存储或传输信息的任何机制,包括但不限于,软盘、光盘、光碟、只读存储器(CD-ROMs)、磁光盘、只读存储器(ROM)、随机存取存储器(RAM)、可擦除可编程只读存储器(EPROM)、电可擦除可编程只读存储器(EEPROM)、磁卡或光卡、闪存、或用于利用因特网以电、光、声或其他形式的传播信号来传输信息(例如,载波、红外信号数字信号等)的有形的机器可读存储器。因此,机器可读介质包括适合于以机器(例如,计算机)可读的形式存储或传输电子指令或信息的任何类型的机器可读介质。
在附图中,可以以特定布置和/或顺序示出一些结构或方法特征。然而,应该理解,可能不需要这样的特定布置和/或排序。而是,在一些实施例中,这些特征可以以不同于说明性附图中所示的方式和/或顺序来布置。另外,在特定图中包括结构或方法特征并不意味着暗示在所有实施例中都需要这样的特征,并且在一些实施例中,可以不包括这些特征或者可以与其他特征组合。
需要说明的是,本申请各设备实施例中提到的各单元/模块都是逻辑单元/模块,在物理上,一个逻辑单元/模块可以是一个物理单元/模块,也可以是一个物理单元/模块的一部分,还可以以多个物理单元/模块的组合实现,这些逻辑单元/模块本身的物理实现方式并不是最重要的,这些逻辑单元/模块所实现的功能的组合才是解决本申请所提出的技术问题的关键。此外,为了突出本申请的创新部分,本申请上述各设备实施例并没有将与解决本申请所提出的技术问题关系不太密切的单元/模块引入,这并不表明上述设备实施例并不存在其它的单元/模块。
需要说明的是,在本专利的示例和说明书中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
虽然通过参照本申请的某些优选实施例,已经对本申请进行了图示和描述,但本领域的普通技术人员应该明白,可以在形式上和细节上对其作各种改变,而不偏离本申请的精神和范围。
Claims (18)
1.一种对象序列化方法,其特征在于,包括:
获取对象的至少一个属性,所述属性包括属性名、属性类型和属性值;
根据所述对象创建包装对象,所述包装对象的每个属性中的属性名和属性值与所述对象的相应属性的属性名和属性值相同,而对于所述包装对象的每个属性的属性类型:
在所述对象的相应属性的属性类型为预设的序列化类型的情况下,所述包装对象的属性类型与所述对象的属性类型相同;
在所述对象的相应属性的属性类型不是预设的序列化类型的情况下,所述包装对象的属性类型为与所述对象的属性类型对应的预设序列化类型;
序列化所述包装对象。
2.根据权利要求1所述的对象序列化方法,其特征在于,根据所述对象创建包装对象,还包括:
在所述对象包含继承关系的情况下,于创建的所述包装对象中去除所述继承关系。
3.根据权利要求1所述的对象序列化方法,其特征在于,还包括:
所述序列化类型包括执行所述序列化方法的编程语言的内置类型。
4.根据权利要求1所述的对象序列化方法,其特征在于,
所述序列化类型包括:字符串类型,日期类型,集合类型和/或自定义类型中的至少一种。
5.根据权利要求1所述的对象序列化方法,其特征在于,还包括:
在所述对象的属性类型是日期类型的情况下,所述包装对象中对应的序列化类型为字符串类型。
6.根据权利要求1所述的对象序列化方法,其特征在于,还包括:
将包装类型的属性类型转换成所述包装类型对应的基本类型。
7.一种对象反序列化方法,其特征在于,包括:
获取使用权利要求1-6任一项所述的对象序列化方法已序列化的对象的数据,基于所述数据获取所述对象的属性,所述属性包括属性名,序列化类型,属性值;
从预先配置的序列化类型与属性类型的对应关系中,获取与所述对象的序列化类型对应的属性类型;
根据所述序列化类型对应的所述属性类型,所述属性名建立所述对象,基于所述属性值对所述对象赋值。
8.根据权利要求7所述的对象反序列化方法,其特征在于,还包括:
在所述对象的数据包含继承关系的情况下,于所述对象中添加所述继承关系。
9.一种对象序列化装置,其特征在于,包括:
获取模块,所述获取模块用于获取对象的至少一个属性,所述属性包括属性名、属性类型和属性值;
创建模块,所述创建模块用于根据所述对象创建包装对象,所述包装对象的每个属性中的属性名和属性值与所述对象的相应属性的属性名和属性值相同,而对于所述包装对象的每个属性的属性类型:
在所述对象的相应属性的属性类型为预设的序列化类型的情况下,所述包装对象的属性类型与所述对象的属性类型相同;
在所述对象的相应属性的属性类型不是预设的序列化类型的情况下,所述包装对象的属性类型为与所述对象的属性类型对应的预设序列化类型;
序列化模块,所述序列化模块用于序列化所述包装对象。
10.根据权利要求9所述的对象序列化装置,其特征在于,所述创建模块根据所述对象创建包装对象,还包括:
所述创建模块在所述对象包含继承关系的情况下,于创建的所述包装对象中去除所述继承关系。
11.根据权利要求9所述的对象序列化装置,其特征在于,还包括:
所述创建模块用于配置所述序列化类型,包括执行所述序列化装置的编程语言的内置类型。
12.根据权利要求9所述的对象序列化装置,其特征在于,
所述创建模块用于配置所述序列化类型,包括:字符串类型,日期类型,集合类型和/或自定义类型中的至少一种。
13.根据权利要求9所述的对象序列化装置,其特征在于,还包括:
所述创建模块用于在所述对象的属性类型是日期类型的情况下,所述包装对象中对应的序列化类型为字符串类型。
14.根据权利要求9所述的对象序列化装置,其特征在于,还包括:
所述创建模块用于将包装类型的属性类型转换成所述包装类型对应的基本类型。
15.一种对象反序列化装置,其特征在于,包括:
获取模块,所述获取模块用于获取使用权利要求1-6任一项所述的对象序列化方法已序列化的对象的数据,基于所述数据获取所述对象的属性,所述属性包括属性名,序列化类型,属性值;
转换模块,所述转换模块用于从预先配置的序列化类型与属性类型的对应关系中,获取与所述对象的序列化类型对应的属性类型;
反序列化模块,所述反序列化模块用于根据所述序列化类型对应的所述属性类型,所述属性名建立所述对象,基于所述属性值对所述对象赋值。
16.根据权利要求15所述的对象反序列化装置,其特征在于,还包括:
所述反序列化模块用于在所述对象的数据包含继承关系的情况下,于所述对象中添加所述继承关系。
17.一种机器可读介质,其特征在于,所述机器可读介质上存储有指令,该指令在机器上执行时使机器执行权利要求1至6中任一项所述的对象序列化方法。
18. 一种对象序列化系统,包括:
存储器,用于存储由系统的一个或多个处理器执行的指令,以及
处理器,是系统的处理器之一,用于执行权利要求1至6中任一项所述的对象序列化方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010042730.3A CN111241346B (zh) | 2020-01-15 | 2020-01-15 | 一种对象序列化方法、装置、机器可读介质以及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010042730.3A CN111241346B (zh) | 2020-01-15 | 2020-01-15 | 一种对象序列化方法、装置、机器可读介质以及系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111241346A CN111241346A (zh) | 2020-06-05 |
CN111241346B true CN111241346B (zh) | 2023-11-10 |
Family
ID=70865636
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010042730.3A Active CN111241346B (zh) | 2020-01-15 | 2020-01-15 | 一种对象序列化方法、装置、机器可读介质以及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111241346B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116301666B (zh) * | 2023-05-17 | 2023-10-10 | 杭州数云信息技术有限公司 | Java对象序列化方法及其反序列化方法及装置、终端 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101661391A (zh) * | 2009-09-24 | 2010-03-03 | 金蝶软件(中国)有限公司 | 一种对象序列化方法、对象反序列化方法、装置及系统 |
CN102981884A (zh) * | 2012-11-22 | 2013-03-20 | 用友软件股份有限公司 | 序列化装置和序列化方法 |
CN106775638A (zh) * | 2016-11-22 | 2017-05-31 | 北京皮尔布莱尼软件有限公司 | 一种对象序列化方法、装置和计算设备 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7730041B2 (en) * | 2004-08-25 | 2010-06-01 | Microsoft Corporation | Data abstraction based serialization |
US9292549B2 (en) * | 2008-12-22 | 2016-03-22 | Sap Se | Method and system for index serialization |
-
2020
- 2020-01-15 CN CN202010042730.3A patent/CN111241346B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101661391A (zh) * | 2009-09-24 | 2010-03-03 | 金蝶软件(中国)有限公司 | 一种对象序列化方法、对象反序列化方法、装置及系统 |
CN102981884A (zh) * | 2012-11-22 | 2013-03-20 | 用友软件股份有限公司 | 序列化装置和序列化方法 |
CN106775638A (zh) * | 2016-11-22 | 2017-05-31 | 北京皮尔布莱尼软件有限公司 | 一种对象序列化方法、装置和计算设备 |
Non-Patent Citations (1)
Title |
---|
王颖 ; ..NET中对象序列化方法.计算机与信息技术.2008,(05),全文. * |
Also Published As
Publication number | Publication date |
---|---|
CN111241346A (zh) | 2020-06-05 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108572818B (zh) | 一种用户界面渲染方法及装置 | |
CN108572965B (zh) | 一种资源加载方法及装置 | |
WO2016192556A1 (zh) | 接口调用方法、装置及终端 | |
US20070174420A1 (en) | Caching of web service requests | |
CN106648569B (zh) | 目标序列化实现方法和装置 | |
US9817857B2 (en) | Deep cloning of objects using binary format | |
US20090024987A1 (en) | Method and system for facilitating the utilization of complex data objects | |
JP6016808B2 (ja) | Webアクセスを実装するための方法およびサーバシステム | |
CN112182036A (zh) | 数据的发送与写入方法、装置、电子设备及可读存储介质 | |
CN110109983B (zh) | 一种操作Redis数据库的方法和装置 | |
CN111241346B (zh) | 一种对象序列化方法、装置、机器可读介质以及系统 | |
CN113778897B (zh) | 接口的自动测试方法、装置、设备及存储介质 | |
WO2022042252A1 (zh) | 驱动配置管理方法、装置、介质、设备及系统 | |
CN114154474A (zh) | 数据导出方法、系统、计算机设备及可读存储介质 | |
CN116225450A (zh) | 文本转换方法和装置,计算设备和可读存储介质 | |
CN115421693A (zh) | 微前端架构的实现方法、装置、计算机设备和存储介质 | |
WO2021203591A1 (zh) | 异构云存储系统的数据处理方法及其可读介质和系统 | |
CN112379885B (zh) | 小程序编译方法、装置、设备及可读存储介质 | |
CN114237407A (zh) | 一种字体图标处理方法、装置及计算机可读存储介质 | |
EP4191407A1 (en) | Method and device for generating and registering ui service package and loading ui service | |
CN114896946A (zh) | 对文本进行转换的方法及相关设备 | |
CN110837896A (zh) | 机器学习模型的存储和调用方法、装置 | |
CN116975087A (zh) | 一种异构数据源的检索方法、装置、设备和介质 | |
CN115729723A (zh) | 一种拷贝方法及装置 | |
CN117149153A (zh) | 业务数据模型的生成方法、装置、计算机设备以及介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |