CN107463668B - 序列化和反序列化的方法及装置、计算机设备及存储介质 - Google Patents
序列化和反序列化的方法及装置、计算机设备及存储介质 Download PDFInfo
- Publication number
- CN107463668B CN107463668B CN201710653322.XA CN201710653322A CN107463668B CN 107463668 B CN107463668 B CN 107463668B CN 201710653322 A CN201710653322 A CN 201710653322A CN 107463668 B CN107463668 B CN 107463668B
- Authority
- CN
- China
- Prior art keywords
- unserializing
- serializing
- type information
- parameter
- data
- 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
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/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2455—Query execution
- G06F16/24568—Data stream processing; Continuous queries
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/25—Integrating or interfacing systems involving database management systems
- G06F16/258—Data format conversion from or to a database
Abstract
一种数据序列化和反序列化的方法及装置、计算机设备及存储介质,一个实施例中的数据序列化的方法包括步骤:接收序列化指令,所述序列化指令包括对象类型信息;根据所述对象类型信息,调用序列及反序列化接口函数,创建所述对象类型信息对应的序列化对象;添加所述序列化对象的序列化对象实例;所述序列化对象实例进行数据序列化,输出序列化文件。本发明实施例的方案简单便捷地实现序列化和反序列化的处理过程,减少了代码量,且减少了出错概率。
Description
技术领域
本发明涉及信息处理技术领域,特别是涉及一种数据序列化和反序列化的方法及装置、一种计算机设备以及一种计算机存储介质。
背景技术
对象序列化/反序列化技术广泛应用于计算机领域,大量使用于系统备份、网络通讯等涉及到数据交换的场景,主要实现将对象串行化为二进制字节流,进而可保存在存储设备或和其他系统交换数据。
序列化(serialization)是将数据对象状态转换为可保持或传输的格式的过程,即将结构化的数据按一定的编码规范转换成指定格式的过程。序列化机制能够将一个实例对象的状态信息写入到一个字节流中,使其可以进行传输或者持久化存储到数据库或文件系统中。与序列化相对的是反序列化(deserialization),它将字节流再转换为数据对象,即将转成指定格式的数据解析成原始的结构化数据的过程。这两个过程结合起来,可以轻松地存储和传输数据。
目前针对序列化和反序列化的处理,通常是单一方式或模板化方式,通过重新编写或者重新编译生成对应的序列化代码函数或者反序列化代码函数,不仅繁冗复杂,而且代码量大,容易因序列化和反序列化变量顺序不同而出错。
发明内容
基于此,本发明实施例的目的在于提供一种数据序列化和反序列化的方法及装置、一种计算机设备以及一种计算机存储介质,其可以简洁地实现序列化和反序列化过程,减少代码量且减少出错概率。
为达到上述目的,本发明的一个实施例中采用以下技术方案:
一种数据序列化的方法,包括步骤:
接收序列化指令,所述序列化指令包括对象类型信息;
根据所述对象类型信息,调用序列及反序列化接口函数,创建所述对象类型信息对应的序列化对象;
添加所述序列化对象的序列化对象实例;
所述序列化对象实例进行数据序列化,输出序列化文件。
一种数据反序列化的方法,包括步骤:
接收反序列化指令,所述反序列化指令中包括对象类型信息;
根据所述对象类型信息,调用序列及反序列化接口函数,创建所述对象类型信息对应的反序列化对象;
将序列化文件读取到所述反序列化对象;
添加所述反序列化对象的反序列化对象实例;
反序列化所述序列化文件至所述反序列化对象实例。
一种数据序列化的装置,包括:
序列化指令接收模块,用于接收序列化指令,所述序列化指令包括对象类型信息;
序列化对象创建模块,用于根据所述对象类型信息,调用序列及反序列化接口函数,创建所述对象类型信息对应的序列化对象;
实例序列化对象模块,用于添加所述序列化对象的序列化对象实例;所述序列化对象实例进行数据序列化,输出序列化文件。
一种数据反序列化的装置,包括:
反序列化指令接收模块,用于接收反序列化指令,所述反序列化指令中包括对象类型信息;
反序列化对象创建模块,用于根据所述对象类型信息,调用序列及反序列化接口函数,创建所述对象类型信息对应的反序列化对象;
文件读取模块,用于将序列化文件读取到所述反序列化对象;
实例反序列化对象模块,用于添加所述反序列化对象的反序列化对象实例;
反序列化模块,用于反序列化所述序列化文件至所述反序列化对象实例。
一种计算机设备,包括存储器、处理器以及存储在所述存储器上并可在所述处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现如上所述的方法的步骤。
一种计算机存储介质,其上存储有计算机程序,该程序被处理器执行时实现如上所述的方法的步骤。
根据如上所述的本发明实施例的方案,其通过创建统一的序列及反序列化接口函数,在需要进行序列化和反序列化的操作时,通过调用该序列及反序列化接口函数创建对应的序列化对象或反序列化对象,进而对创建的对象进行实例化以完成序列化和反序列化的过程,从而将序列化和反序列化的过程从静态变成了动态,无需重新编写或重新编译生成对应的序列化代码函数或者反序列化代码函数,一次实现后无需更改序列化和反序列化的代码和编译程序,简单便捷地实现序列化和反序列化的处理过程,减少了代码量,且减少了出错概率。
附图说明
图1是一个实施例中的数据序列化的方法的流程示意图;
图2是一个实施例中的数据反序列化的方法的流程示意图;
图3是一个实施例中的数据序列化的装置的结构示意图;
图4是一个实施例中的数据反序列化的装置的结构示意图。
具体实施方式
为使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步的详细说明。应当理解,此处所描述的具体实施方式仅仅用以解释本发明,并不限定本发明的保护范围。
图1示出了一个实施例中的数据序列化的方法的流程示意图,该方法可执行于任何需要进行序列化操作的设备上。如图1所示,该实施例中的数据序列化的方法包括下述步骤S101至步骤S104。
步骤S101:接收序列化指令,所述序列化指令包括对象类型信息。
其中,在一个示例中,该序列化指令可以是任何可能的指示要开始进行序列化处理的指令,这里的对象类型信息可以是Json格式、Xml格式或二进制格式等任何存储格式的信息,对象类型信息表明了序列化处理后的存储方式。
步骤S102:根据所述对象类型信息,调用序列及反序列化接口函数,创建所述对象类型信息对应的序列化对象。
通过创建所述对象类型信息对应的序列化对象,实质上获得了序列及反序列化接口函数的子类序列化类,从而实现了序列及反序列化接口函数的接口的调用。
步骤S103:添加所述序列化对象的序列化对象实例。
在添加序列化对象实例时,可以采用任何可能的方式进行实例的添加,在一个具体的应用实例中,可以通过指向具体实例的指针添加所述序列化对象的序列化对象实例。从而,通过指针的方式实现序列化对象实例,使得同一对象只序列化一次,反序列化时之前引用同一对象的变量仍能保证是同一对象。
另一方面,在添加序列化对象实例时,所添加的序列化对象的序列化对象实例可以包括两个以上,从而可以针对多个序列化对象实例进行序列化操作,提高序列化的效率。
步骤S104:所述序列化对象实例进行数据序列化,输出序列化文件。
根据如上所述的实施例的方案,在需要进行序列化的操作时,通过调用统一创建的序列及反序列化接口函数创建对应的序列化对象,进而对创建的对象进行实例化以完成序列化,从而将序列化的过程从静态变成了动态,无需重新编写或重新编译生成对应的序列化代码函数,一次实现后无需更改序列化的代码和编译程序,简单便捷地实现序列化的处理过程,减少了代码量,且减少了出错概率。
在一个示例中,在上述步骤S104中序列化对象实例输出序列化文件之后,还可以进一步释放上述序列化对象。
在另一个实施例中,在上述步骤S102中创建序列化对象之后,在步骤S104中序列化对象实例进行数据序列化之前,还可以包括步骤:设置所述序列化对象的序列化标志位。
从而,在步骤S104中序列化对象实例进行数据序列化时,可以对基于所述序列化标志位确定的参数类型的数据进行数据序列化。从而可以只对指定的参数类型的数据进行数据序列化。
上述数据序列化处理时,基于所针对的需要进行数据序列化的数据的不同,对应的序列化标志位确定的参数类型也会有所差异。在一个示例中,以上述数据序列化的数据为地图数据为例,上述序列化标志位可以为是否为三维序列化的标识。当所述序列化标志位为三维序列化标识时,基于所述序列化标志位确定的参数类型可以包括高度参数、经度参数和维度参数,否则,基于所述序列化标志位确定的参数类型可以包括经度参数和维度参数。
在另一个示例中,在上述步骤S102中创建序列化对象之后,在步骤S104中序列化对象实例进行数据序列化之前,还可以包括步骤:添加与所述序列化对象相绑定的自定义数据的信息。
从而可以据此实现自定义数据的添加和绑定,这里的自定义数据可以是任何类型的数据,例如序列化时的某种控制参数、序列化版本信息、作者信息等等中的任意一种或组合。
图2中示出了一个实施例中的数据反序列化的方法的流程示意图,该实施例中的数据反序列化的方法包括步骤S201至步骤S205。
步骤S201:接收反序列化指令,所述反序列化指令中包括对象类型信息。
其中,在一个示例中,该反序列化指令可以是任何可能的指示要开始进行反序列化处理的指令,这里的对象类型信息可以是Json格式、Xml格式或二进制格式等任何存储格式的信息,对象类型信息表明了序列化文件的存储方式。
步骤S202:根据所述对象类型信息,调用序列及反序列化接口函数,创建所述对象类型信息对应的反序列化对象。
这里的序列及反序列化接口函数,与上述实施例中的数据序列化方法中涉及的序列及反序列化接口函数是同一个,通过创建所述对象类型信息对应的反序列化对象,实质上获得了序列及反序列化接口函数的子类反序列化类,从而实现了序列及反序列化接口函数的接口的调用。
步骤S203:将序列化文件读取到所述反序列化对象。
将序列化文件读取到反序列化对象的方式,可以采用任何可能的将文件读取到对象的方式进行。
步骤S204:添加所述反序列化对象的反序列化对象实例。
在添加反序列化对象实例时,可以采用任何可能的方式进行实例的添加,在一个具体的应用实例中,可以通过指向具体实例的指针添加所述反序列化对象的反序列化对象实例。从而,通过指针的方式实现反序列化对象实例,使得同一对象只反序列化一次。
另一方面,在添加反序列化对象实例时,所添加的反序列化对象的反序列化对象实例可以包括两个以上,从而可以针对多个反序列化对象实例进行反序列化操作,提高反序列化的效率。
步骤S205:反序列化所述序列化文件至所述反序列化对象实例。
根据如上所述的实施例的方案,在需要进行反序列化的操作时,通过调用统一创建的序列及反序列化接口函数创建对应的反序列化对象,进而对创建的对象进行实例化以完成反序列化的过程,从而将反序列化的过程从静态变成了动态,无需重新编写或重新编译生成对应的反序列化代码函数,一次实现后无需更改反序列化的代码和编译程序,简单便捷地实现反序列化的处理过程,减少了代码量,且减少了出错概率。
在一个示例中,在上述步骤S205反序列化所述序列化文件至所述反序列化对象实例之后,还可以进一步释放上述反序列化对象。
在另一个实施例中,在上述步骤S202创建了反序列化对象之后,步骤S203的将序列化文件读取到所述反序列化对象之前,还可以包括步骤:设置所述反序列化对象的反序列化标志位。
从而,在步骤S205中反序列化所述序列化文件至所述反序列化对象实例时,可以基于所述反序列化标志位确定的参数类型,对所述序列化文件中所述参数类型的数据进行数据反序列化。从而可以只对指定的参数类型的数据进行数据反序列化。
上述数据反序列化处理时,基于所针对的需要进行数据反序列化的文件的数据的不同,对应的反序列化标志位确定的参数类型也会有所差异。在一个示例中,以上述数据反序列化的文件的数据为地图数据为例,上述反序列化标志位可以为是否为三维序列化的标识。当所述反序列化标志位为三维序列化标识时,基于所述反序列化标志位确定的参数类型可以包括高度参数、经度参数和维度参数,否则,基于所述反序列化标志位确定的参数类型可以包括经度参数和维度参数。
在另一个示例中,在上述步骤S202创建反序列化对象之后,步骤S203将序列化文件读取到反序列化对象之前,还可以包括步骤:添加绑定的自定义数据的信息。
从而可以据此实现自定义数据的添加和绑定,这里的自定义数据可以是任何类型的数据,例如序列化时的某种控制参数、序列化版本信息、作者信息等等中的任意一种或组合。
如上所述的数据序列化的方法可以在任何需要进行数据的序列化的设备上执行,数据反序列化的方法可以在任何需要进行数据的反序列化的设备上执行。
基于如上所述的各实施例,以下结合一个应用示例进行详细举例说明。可以理解的是,该详细举例说明是一种一种具体应用到示例性说明,并不用以对本发明实施例的方案构成限定。
本发明实施例方案在具体实现时,需事先实现序列及反序列化接口函数,本示例中可记为Serialize接口函数,该Serialize接口函数可以通过普通类实现。在序列化与反序列化时,都执行该Serialize接口函数,确定该类的序列化规则和反序列化规则。
以进行数据序列化时创建序列化的规则为例,假设是针对地图数据等各种三维数据,则在该序列化规则中可以包含有序列化标志位的信息。如下例所示,当序列化标志位为ThreeDimension时,采用“三维”序列化方式,即序列化m_fAlt、m_dLon以及m_dLat参数。当序列化标志位不是ThreeDimension时,即不是“三维”模式时,则只序列化m_dLon、m_dLat这两项参数。
在确定序列化规则之后,在具体进行数据序列化过程的处理时,首先根据对象类型信息,调用Serialize接口函数,创建序列化对象,通过创建所述对象类型信息对应的序列化对象,实质上获得了Serialize接口函数的子类序列化类,从而实现了Serialize接口函数的接口的调用。这里的对象类型信息,表明了序列化处理后的存储方式,在本示例中,可以从以下三种存储方式中进行选择:二进制格式、Json(JavaScript Object Notation,一种轻量级的数据交换语言)格式,Xml(eXtensible Markup Language,可扩展标记语言)格式。
一个示例中的创建序列化对象的方式中的代码实现如下所示:
上述代码示例中,XCORE_API.CreateXXXSerializer()函数返回类ISerialize的子类序列化类,实现了接口的调用。
在创建序列化对象之后,可进一步设置创建的序列化对象的序列化标志位,以指示需要对哪些参数的数据进行数据序列化。可以理解,在实际应用中,也可以不设置序列化标志位,此时则是指示对默认的参数的数据进行数据序列化。
一个具体示例中的设置序列化标志位时的代码实现可以如下:
s->Flags=type;
其中,该示例中的type=ThreeDimension。
在创建序列化对象之后,可进一步设置添加与所述序列化对象相绑定的自定义数据的信息。
以序列化对象A为例,可以使用
A->UserData={“具体的自定义数据”};
来绑定自定义数据。而自定义数据的具体内容可以是任何内容,例如序列化时的某种控制参数、序列化版本信息、作者信息以及其他类型数据等等中的任意一种或组合。从而可以据此实现自定义数据的添加和绑定。
可以理解,上述设置序列化标志位以及添加自定义数据的信息的过程,可以不分先后顺序,也可以结合实际需要设置相关的先后顺序。
随后,可添加上述创建的序列化对象的序列化对象实例,以实例化序列化对象。一个具体示例中的实例化序列化对象的代码实现可以如下所示:
*s+NVP_ALIAS(CPos pos)+NVP_ALIAS(CPos,ptr);
其中,Pos为类CPosition的具体实例,Ptr是指向具体实例的指针,可将其当做具体实例处理。可见,接口类ISerialize提供了operator+函数接口,而子类序列化对象类实现了该方法。
可以理解,在添加序列化对象实例时,可以添加多个序列化对象实例。
随后,序列化对象实例进行数据序列化,输出序列化文件,一个具体示例中的输出序列化文件的代码实现可如下所示,其中strFileOut为输出文件名:
s->SerializeFile(strFileOut);
序列化对象实例输出序列化文件之后,可释放序列化对象,一个具体应用实例中的代码实现可以是:
s->Release();
基于上述以进行数据反序列化时创建反序列化的规则为例,假设是针对地图数据等各种三维数据,则在该反序列化规则中可以包含有反序列化标志位的信息。如下例所示,当反序列化标志位为ThreeDimension时,采用“三维”反序列方式,即反序列化m_fAlt、m_dLon以及m_dLat参数。当反序列化标志位不是ThreeDimension时,即不是“三维”模式时,则只反序列化m_dLon、m_dLat这两项参数。
在确定反序列化规则之后,在具体进行数据反序列化过程的处理时,首先根据对象类型信息,调用Serialize接口函数,创建反序列化对象,通过创建所述对象类型信息对应的反序列化对象,实质上获得了Serialize接口函数的子类反序列化类,从而实现了Serialize接口函数的接口的调用。这里的对象类型信息,表明了需要进行反序列化的序列化文件的存储方式,在本示例中,可以从以下三种存储方式中进行选择:二进制格式、Json(JavaScript Object Notation,一种轻量级的数据交换语言)格式,Xml(eXtensibleMarkup Language,可扩展标记语言)格式。
一个示例中的创建反序列化对象的方式中的代码实现如下所示:
上述代码示例中,XCORE_API.CreateXXXUnSerializer()函数返回类ISerialize的子类反序列化类,实现了接口的调用。
在创建反序列化对象之后,可进一步设置创建的反序列化对象的反序列化标志位,以指示需要对序列化文件中哪些参数的数据进行反序列化。可以理解,在实际应用中,也可以不设置反序列化标志位,此时则是指示对默认的参数的数据进行反序列化。
一个具体示例中的设置反序列化标志位时的代码实现可以如下:
s->Flags=type;
其中,该示例中的type=ThreeDimension。
在创建反序列化对象之后,可进一步设置添加与所述反序列化对象相绑定的自定义数据的信息。
以反序列化对象B为例,可以使用
B->UserData={“具体的自定义数据”};
来绑定自定义数据。而自定义数据的具体内容可以是任何内容,例如序列化时的某种控制参数、序列化版本信息、作者信息以及其他类型数据等等中的任意一种或组合。
可以理解,上述设置反序列化标志位以及添加自定义数据的信息的过程,可以不分先后顺序,也可以结合实际需要设置相关的先后顺序。
随后,将序列化文件读取到反序列化对象,一个具体示例中的将序列化文件读取到反序列化对象的代码实现可以如下:
s->SerializeFile(strFileOut);
随后添加所述反序列化对象的反序列化对象实例,一个具体示例中的添加所述反序列化对象的反序列化对象实例的代码实现可以如下:
*s+NVP_ALIAS(CPos pos)+NVP_ALIAS(CPos,ptr);
其中,Pos为类CPosition的具体实例,Ptr是指向具体实例的指针,可将其当做具体实例处理。可见,接口类ISerialize提供了operator+函数接口,而子类反序列化对象类实现了该方法。从而,通过采用对象指针管理,同一对象只序列化一次,反序列化时之前引用同一对象的变量仍能保证是同一对象。在一个具体应用示例中,可以存储有对象指针的动态列表,每个对象数据项可以用从1开始的整数ID号(即列表中的序号)进行标识。
可以理解,在添加反序列化对象实例时,可以添加多个反序列化对象实例。
在添加反序列化对象实例之后,即可将序列化文件反序列化至该反序列化对象实例,并在将序列化文件反序列化至该反序列化对象实例之后,可释放反序列化对象,一个具体应用实例中的代码实现可以是:
s->Release();
基于与上述方法相同的思想,本发明实施例还提供数据序列化和反序列化的装置。
图3示出了一个实施例中的数据序列化的装置的结构示意图。如图3所示,该实施例中的数据序列化的装置包括:
序列化指令接收模块301,用于接收序列化指令,所述序列化指令包括对象类型信息;这里的对象类型信息可以是Json格式、Xml格式或二进制格式等任何存储格式的信息,对象类型信息表明了序列化处理后的存储方式;
序列化对象创建模块302,用于根据所述对象类型信息,调用序列及反序列化接口函数,创建所述对象类型信息对应的序列化对象;通过创建所述对象类型信息对应的序列化对象,实质上获得了序列及反序列化接口函数的子类序列化类,从而实现了序列及反序列化接口函数的接口的调用;
实例序列化对象模块303,用于添加所述序列化对象的序列化对象实例;所述序列化对象实例进行数据序列化,输出序列化文件。
根据如上所述的实施例的方案,在需要进行序列化的操作时,通过调用统一创建的序列及反序列化接口函数创建对应的序列化对象,进而对创建的对象进行实例化以完成序列化,从而将序列化的过程从静态变成了动态,无需重新编写或重新编译生成对应的序列化代码函数,一次实现后无需更改序列化的代码和编译程序,简单便捷地实现序列化的处理过程,减少了代码量,且减少了出错概率。
其中,实例序列化对象模块303在添加序列化对象实例时,可以采用任何可能的方式进行实例的添加,在一个具体的应用实例中,可以通过指向具体实例的指针添加所述序列化对象的序列化对象实例。从而,通过指针的方式实现序列化对象实例,使得同一对象只序列化一次,反序列化时之前引用同一对象的变量仍能保证是同一对象。
另一方面,实例序列化对象模块303在添加序列化对象实例时,所添加的序列化对象的序列化对象实例可以包括两个以上,从而可以针对多个序列化对象实例进行序列化操作,提高序列化的效率。
如图3所示,在一个示例中,该数据序列化的装置还可以包括:
序列化对象释放模块304,用于在所述序列化对象实例输出序列化文件之后,释放所述序列化对象。
如图3所示,在一个示例中,该数据序列化的装置还可以包括:
序列化标志位设定模块305,用于在所述序列化对象创建模块创建序列化对象之后,设置所述序列化对象的序列化标志位。
此时,序列化对象实例进行数据序列化时,是对基于所述序列化标志位确定的参数类型的数据进行数据序列化。从而可以只对指定的参数类型的数据进行数据序列化。
上述数据序列化处理时,基于所针对的需要进行数据序列化的数据的不同,对应的序列化标志位确定的参数类型也会有所差异。在一个示例中,以上述数据序列化的数据为地图数据为例,上述序列化标志位可以为是否为三维序列化的标识。当所述序列化标志位为三维序列化标识时,基于所述序列化标志位确定的参数类型可以包括高度参数、经度参数和维度参数,否则,基于所述序列化标志位确定的参数类型可以包括经度参数和维度参数。
在一个示例中,如图3所示,该数据序列化的装置还可以包括:
自定义数据绑定模块306,用于在所述序列化对象创建模块创建序列化对象之后,添加与所述序列化对象相绑定的自定义数据的信息。
从而可以据此实现自定义数据的添加和绑定,这里的自定义数据可以是任何类型的数据,例如序列化时的某种控制参数、序列化版本信息、作者信息等等中的任意一种或组合。
图4示出了一个实施例中的数据反序列化的装置的结构示意图,如图4所示,该实施例中的数据反序列化的装置包括:
反序列化指令接收模块401,用于接收反序列化指令,所述反序列化指令中包括对象类型信息;这里的对象类型信息可以是Json格式、Xml格式或二进制格式等任何存储格式的信息,对象类型信息表明了序列化文件的存储方式;
反序列化对象创建模块402,用于根据所述对象类型信息,调用序列及反序列化接口函数,创建所述对象类型信息对应的反序列化对象;序列及反序列化接口函数,与上述实施例中的数据序列化方法中涉及的序列及反序列化接口函数是同一个,通过创建所述对象类型信息对应的反序列化对象,实质上获得了序列及反序列化接口函数的子类反序列化类,从而实现了序列及反序列化接口函数的接口的调用;
文件读取模块403,用于将序列化文件读取到所述反序列化对象;
实例反序列化对象模块404,用于添加所述反序列化对象的反序列化对象实例;
反序列化模块405,用于反序列化所述序列化文件至所述反序列化对象实例。
根据如上所述的实施例的方案,在需要进行反序列化的操作时,通过调用统一创建的序列及反序列化接口函数创建对应的反序列化对象,进而对创建的对象进行实例化以完成反序列化的过程,从而将反序列化的过程从静态变成了动态,无需重新编写或重新编译生成对应的反序列化代码函数,一次实现后无需更改反序列化的代码和编译程序,简单便捷地实现反序列化的处理过程,减少了代码量,且减少了出错概率。
其中,在一个示例中,实例反序列化对象模块404在添加反序列化对象实例时,可以采用任何可能的方式进行实例的添加,在一个具体的应用实例中,可以通过指向具体实例的指针添加所述反序列化对象的反序列化对象实例。从而,通过指针的方式实现反序列化对象实例,使得同一对象只反序列化一次。
另一方面,在一个示例中,实例反序列化对象模块404在添加反序列化对象实例时,所添加的反序列化对象的反序列化对象实例可以包括两个以上,从而可以针对多个反序列化对象实例进行反序列化操作,提高反序列化的效率。
如图4所示,在一个示例中,上述数据反序列化的装置还可以包括:
反序列化对象释放模块406,用于在所述反序列化模块反序列化所述序列化文件至所述反序列化对象实例之后,释放所述反序列化对象。
在另一个实施例中,如图4所示,上述数据反序列化的装置还可以包括:
反序列化标志位设置模块407,用于在所述反序列化对象创建模块402创建反序列化对象之后,设置所述反序列化对象的反序列化标志位。
此时,所述反序列化模块反序列化所述序列化文件至所述反序列化对象实例时,基于所述反序列化标志位确定的参数类型,对所述序列化文件中所述参数类型的数据进行数据反序列化。从而可以只对指定的参数类型的数据进行数据反序列化。
上述数据反序列化处理时,基于所针对的需要进行数据反序列化的文件的数据的不同,对应的反序列化标志位确定的参数类型也会有所差异。在一个示例中,以上述数据反序列化的文件的数据为地图数据为例,上述反序列化标志位可以为是否为三维序列化的标识。当所述反序列化标志位为三维序列化标识时,基于所述反序列化标志位确定的参数类型可以包括高度参数、经度参数和维度参数,否则,基于所述反序列化标志位确定的参数类型可以包括经度参数和维度参数。
在另一个示例中,如图4所示,该数据反序列化的装置还可以包括:
自定义数据绑定模块408,用于在所述反序列化对象创建模块创建反序列化对象之后,添加与所述反序列化对象相绑定的自定义数据的信息。
从而可以据此实现自定义数据的添加和绑定,这里的自定义数据可以是任何类型的数据,例如序列化时的某种控制参数、序列化版本信息、作者信息等等中的任意一种或组合。
基于如上所述的示例,在一个实施例中还提供一种计算机设备,该计算机设备包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其中,处理器执行所述程序时实现如上述各实施例中的任意一个实施例中的方法。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一非易失性的计算机可读取存储介质中,如本发明实施例中,该程序可存储于计算机系统的存储介质中,并被该计算机系统中的至少一个处理器执行,以实现包括如上述各方法的实施例的流程。其中,所述的存储介质可为磁碟、光盘、只读存储记忆体(Read-Only Memory,ROM)或随机存储记忆体(Random Access Memory,RAM)等。
据此,在一个实施例中还提供一种存储介质,其上存储有计算机程序,其中,该程序被处理器执行时实现如上述各实施例中的任意一个实施例中的方法。以上所述实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
以上所述实施例仅表达了本发明的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。因此,本发明专利的保护范围应以所附权利要求为准。
Claims (10)
1.一种数据序列化的方法,其特征在于,包括步骤:
接收序列化指令,所述序列化指令包括对象类型信息,所述对象类型信息表明了序列化处理后的存储方式,所述对象类型信息为Json格式、Xml格式或二进制格式;
根据所述对象类型信息,调用序列及反序列化接口函数,创建所述对象类型信息对应的序列化对象,所述序列及反序列化接口函数,为序列化时与反序列化时均执行的接口函数,用以确定序列化规则和反序列化规则;
添加所述序列化对象的序列化对象实例,以实例化所述序列化对象;
所述序列化对象实例进行数据序列化,输出序列化文件。
2.根据权利要求1所述的数据序列化的方法,其特征在于:
在创建序列化对象之后,序列化对象实例进行数据序列化之前,还包括步骤:设置所述序列化对象的序列化标志位;
所述序列化对象实例进行数据序列化时,对基于所述序列化标志位确定的参数类型的数据进行数据序列化。
3.根据权利要求2所述的数据序列化的方法,其特征在于:
所述数据序列化的数据为地图数据;
当所述序列化标志位为三维序列化标识时,基于所述序列化标志位确定的参数类型包括高度参数、经度参数和维度参数,否则,基于所述序列化标志位确定的参数类型包括经度参数和维度参数。
4.一种数据反序列化的方法,其特征在于,包括步骤:
接收反序列化指令,所述反序列化指令中包括对象类型信息,所述对象类型信息表明了序列化文件的存储方式,所述对象类型信息为Json格式、Xml格式或二进制格式;
根据所述对象类型信息,调用序列及反序列化接口函数,创建所述对象类型信息对应的反序列化对象,所述序列及反序列化接口函数,为序列化时与反序列化时均执行的接口函数,用以确定序列化规则和反序列化规则;
将序列化文件读取到所述反序列化对象;
添加所述反序列化对象的反序列化对象实例,以实例化所述反序列化对象;
反序列化所述序列化文件至所述反序列化对象实例。
5.一种数据序列化的装置,其特征在于,包括:
序列化指令接收模块,用于接收序列化指令,所述序列化指令包括对象类型信息,所述对象类型信息表明了序列化处理后的存储方式,所述对象类型信息为Json格式、Xml格式或二进制格式;
序列化对象创建模块,用于根据所述对象类型信息,调用序列及反序列化接口函数,创建所述对象类型信息对应的序列化对象,所述序列及反序列化接口函数,为序列化时与反序列化时均执行的接口函数,用以确定序列化规则和反序列化规则;
实例序列化对象模块,用于添加所述序列化对象的序列化对象实例,以实例化所述序列化对象;所述序列化对象实例进行数据序列化,输出序列化文件。
6.根据权利要求5所述的数据序列化的装置,其特征在于:
还包括:序列化标志位设定模块,用于在所述序列化对象创建模块创建序列化对象之后,设置所述序列化对象的序列化标志位;
所述序列化对象实例进行数据序列化时,对基于所述序列化标志位确定的参数类型的数据进行数据序列化。
7.根据权利要求6所述的数据序列化的装置,其特征在于:
所述数据序列化的数据为地图数据;
当所述序列化标志位为三维序列化标识时,基于所述序列化标志位确定的参数类型包括高度参数、经度参数和维度参数,否则,基于所述序列化标志位确定的参数类型包括经度参数和维度参数。
8.一种数据反序列化的装置,其特征在于,包括:
反序列化指令接收模块,用于接收反序列化指令,所述反序列化指令中包括对象类型信息,所述对象类型信息表明了序列化文件的存储方式,所述对象类型信息为Json格式、Xml格式或二进制格式;
反序列化对象创建模块,用于根据所述对象类型信息,调用序列及反序列化接口函数,创建所述对象类型信息对应的反序列化对象,所述序列及反序列化接口函数,为序列化时与反序列化时均执行的接口函数,用以确定序列化规则和反序列化规则;
文件读取模块,用于将序列化文件读取到所述反序列化对象;
实例反序列化对象模块,用于添加所述反序列化对象的反序列化对象实例,以实例化所述反序列化对象;
反序列化模块,用于反序列化所述序列化文件至所述反序列化对象实例。
9.一种计算机设备,包括存储器、处理器以及存储在所述存储器上并可在所述处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现如权利要求1至4任意一项所述的方法的步骤。
10.一种计算机存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现如权利要求1至4任意一项所述的方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710653322.XA CN107463668B (zh) | 2017-08-02 | 2017-08-02 | 序列化和反序列化的方法及装置、计算机设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710653322.XA CN107463668B (zh) | 2017-08-02 | 2017-08-02 | 序列化和反序列化的方法及装置、计算机设备及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107463668A CN107463668A (zh) | 2017-12-12 |
CN107463668B true CN107463668B (zh) | 2019-03-26 |
Family
ID=60548306
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710653322.XA Active CN107463668B (zh) | 2017-08-02 | 2017-08-02 | 序列化和反序列化的方法及装置、计算机设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN107463668B (zh) |
Families Citing this family (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108490895A (zh) * | 2018-02-28 | 2018-09-04 | 上海福赛特自动化系统有限公司 | 一种生产线控制方法及系统、存储介质及工业pc |
CN108810000B (zh) * | 2018-06-20 | 2021-07-30 | 北京经纬恒润科技股份有限公司 | 一种生成序列化和反序列化api的方法及装置 |
CN108932123B (zh) * | 2018-06-21 | 2022-03-11 | 北京奇虎科技有限公司 | 参数处理方法和装置 |
CN110914799B (zh) * | 2018-06-30 | 2023-02-28 | 华为云计算技术有限公司 | 一种反序列化方法、装置以及计算设备 |
IT201900020476A1 (it) * | 2019-11-06 | 2021-05-06 | Ailia Sa | Metodo di esecuzione di una istanza di uno smart contract mediante una blockchain |
EP3983922A1 (en) * | 2019-06-14 | 2022-04-20 | Ailia SA | Method for the execution of an instance of a smart contract by means of a blockchain |
CN110275789A (zh) * | 2019-06-24 | 2019-09-24 | 恒生电子股份有限公司 | 数据处理方法及装置 |
CN111931200B (zh) * | 2020-07-13 | 2024-02-23 | 车智互联(北京)科技有限公司 | 一种数据序列化方法、移动终端和可读存储介质 |
CN115080061B (zh) * | 2022-06-28 | 2023-09-29 | 中国电信股份有限公司 | 反序列化攻击检测方法、装置、电子设备及介质 |
CN116126429B (zh) * | 2022-12-06 | 2023-11-17 | 谷斗科技(上海)有限公司 | 一种非数据类型对象的引用持久化及其恢复的方法 |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6941510B1 (en) * | 2000-06-06 | 2005-09-06 | Groove Networks, Inc. | Method and apparatus for efficient management of XML documents |
CN104077335B (zh) * | 2013-05-07 | 2017-05-03 | 腾讯科技(深圳)有限公司 | 一种结构化数据的序列化、反序列化方法、装置和系统 |
CN104360865B (zh) * | 2014-11-28 | 2018-05-18 | 中国建设银行股份有限公司 | 一种序列化方法、反序列化方法及相关设备 |
CN106570018B (zh) * | 2015-10-10 | 2021-01-15 | 阿里巴巴集团控股有限公司 | 序列化与反序列化的方法、装置、系统以及电子设备 |
-
2017
- 2017-08-02 CN CN201710653322.XA patent/CN107463668B/zh active Active
Also Published As
Publication number | Publication date |
---|---|
CN107463668A (zh) | 2017-12-12 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107463668B (zh) | 序列化和反序列化的方法及装置、计算机设备及存储介质 | |
US11941381B2 (en) | Method for compiling from a high-level scripting language to a blockchain native scripting language | |
US6678885B2 (en) | System and method for common code generation | |
US7739696B2 (en) | Message translation systems and methods | |
CN110471666A (zh) | 代码自动转换方法和装置、代码转换器及介质 | |
US20130055291A1 (en) | Describing native application programming interfaces of an operating system with metadata | |
CN110597814B (zh) | 结构化数据的序列化、反序列化方法以及装置 | |
CN110275789A (zh) | 数据处理方法及装置 | |
CN102929853A (zh) | 基于Excel表单关联的DCS项目数据生成系统和方法 | |
CN103425469A (zh) | 基于mda技术的手机游戏代码生成方法 | |
CN104281604B (zh) | 生成Targetlink数据字典分层树的方法和系统 | |
CN109558159A (zh) | 游戏中用户界面的更新方法和装置 | |
CN105867886A (zh) | 一种写表格的方法及装置 | |
Takenobu | Ethereum EVM illustrated | |
CN109491919B (zh) | 一种软件测试方法及测试平台 | |
CN110018866A (zh) | 用户界面主题更新方法、装置、系统、车机及车辆 | |
CN105793842B (zh) | 序列化消息之间的转换方法和装置 | |
US20090300648A1 (en) | Continuation-Based Runtime Callback Invocation | |
CN112035380B (zh) | 一种数据处理方法、装置、设备及可读存储介质 | |
CN108255486A (zh) | 用于表单设计的视图转换方法、装置和电子设备 | |
CN111221787A (zh) | 一种文件处理方法及装置 | |
CN109977024A (zh) | 支持nvm实时下载的cpu芯片仿真器 | |
CN111273913A (zh) | 一种输出规范表示的应用程序接口数据的方法及装置 | |
CN117608590B (zh) | 数据组包解包方法、装置和计算机设备 | |
CN113138770B (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 |