CN108415741A - 对象序列化和反序列化方法及相关装置 - Google Patents

对象序列化和反序列化方法及相关装置 Download PDF

Info

Publication number
CN108415741A
CN108415741A CN201810150509.2A CN201810150509A CN108415741A CN 108415741 A CN108415741 A CN 108415741A CN 201810150509 A CN201810150509 A CN 201810150509A CN 108415741 A CN108415741 A CN 108415741A
Authority
CN
China
Prior art keywords
type
pointer
serialized
serializing
value
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.)
Granted
Application number
CN201810150509.2A
Other languages
English (en)
Other versions
CN108415741B (zh
Inventor
周江
张丽
王建行
周洪斌
李建颖
罗德志
王枭
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Tencent Technology Shenzhen Co Ltd
Original Assignee
Tencent Technology Shenzhen Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Tencent Technology Shenzhen Co Ltd filed Critical Tencent Technology Shenzhen Co Ltd
Priority to CN201810150509.2A priority Critical patent/CN108415741B/zh
Publication of CN108415741A publication Critical patent/CN108415741A/zh
Application granted granted Critical
Publication of CN108415741B publication Critical patent/CN108415741B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/44Arrangements for executing specific programs
    • G06F9/448Execution paradigms, e.g. implementations of programming paradigms
    • G06F9/4488Object-oriented

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Debugging And Monitoring (AREA)

Abstract

本申请实施例公开了对象序列化和反序列化方法及相关装置,属于通信技术领域。该方法中序列化阶段获取对象的类型指针,对该对象进行序列化时将该类型指针一起进行序列化。这样,在反序列化时能够根据该类型指针确定对象的类型,达到无需指定对象的目标类型的目的,能够准确反序列化对象。此外,类型指针能够适用所有类型的对象,使得本方案的应用范围广。

Description

对象序列化和反序列化方法及相关装置
技术领域
本申请实施例涉及通信技术领域,特别涉及对象序列化和反序列化方法及相关装置。
背景技术
newtonsoft.json是常用的序列化工具,其通过判断对象类型,将不同类型的数据进行Json序列化。如图1所示,左半部图表示序列化的对象,右半部图中内容为其序列化后的结果。具体的:
如果是基本类型(如int、float等),直接将值写入Json,例如将图1中i为int型,序列化结果中仅有其值为1,同理序列化结果中有f的值2.0、以及bool型的b值为ture。
如果是Class(类)或Struct(结构体),将遍历成员并获取其值,并将成员名及值Json序列化。如图1中数组型Vector,序列化结果中包括各成员x、y、z及其值。
反序列化时,通过指定目标类型,从Json中获取其值并赋值,从而达到还原对象的目的。
故此,现有技术中在进行反序列化时,需要指定对象的目标类型,导致反序列不方便。此外,若指定目标类型不准确,容易导致序列化结果出错。
发明内容
为了解决反序列化时需要指定目标类型导致反序列化操作不便且可能不准确的问题,本申请实施例提供了对象序列化和反序列方法及相关装置。所述技术方案如下:
根据本申请实施例的第一方面,提供了一种对象序列化方法,包括:
通过反射机制获取对象和与所述对象对应的类型指针;
根据所述对象的类型指针确定该对象的类型;
若该对象的类型为基本类型,则将该对象的类型指针、以及该对象的值进行序列化;
若该对象的类型不为基本类型的对象,则将该对象和该对象的各个成员对象各自的类型指针、成员对象的名称、以及成员对象的值进行序列化,其中,各成员对象的类型指针、名称和值在序列化结果中对应存储。
在一种可能的实施方式中,所述方法还包括:
根据预置的对象类型与类型ID(identification,标识)的对应关系,确定该对象对应的类型ID;
进行序列化时,将该对象的类型ID一起进行序列化。
在一种可能的实施方式中,所述方法还包括:
从对象的序列化结果中获取该对象的类型ID;
根据类型ID和显示方式之间的对象关系,确定该对象的显示方式;
根据确定的显示方式显示该对象。
在一种可能的实施方式中,所述方法还包括:
将完成序列化的对象存储在已序列化对象集合中;
获取该对象的类型指针之前,还包括:
确定该对象不在所述已序列化对象集合中。
在一种可能的实施方式中,获取与所述对象对应的类型指针之前,所述方法还包括:
确定该对象不为空对象。
在一种可能的实施方式中,根据所述对象的类型指针确定该对象的类型之后,所述方法还包括
在预先配置的忽略列表中查询是否存在该对象的类型;
若存在,则不序列化该对象;
若不存在,则执行若为基本类型的对象,则将该对象的类型指针、以及该对象的值进行序列化;若不为基本类型的对象,则将该对象和该对象的各个成员对象各自的类型指针、成员对象的名称、以及成员对象的值进行序列化,其中,各成员对象的类型指针、名称和值在序列化结果中对应存储的步骤。
根据本申请实施例的第二方面,本申请提供一种对象反序列化方法,包括:
获取对象的序列化结果,该序列化结果中包括该对象的类型指针;
根据该对象的类型指针,创建该对象,其中,若该对象为基本类型从序列化结果中获取该对象的值进行反序列化;若该对象不为基本类型,则根据序列化结果该对象的各成员对象的类型指针创建成员对象,并根据各成员对象的名称和值进行反序列化。
在一种可能的实施方式中,所述序列化结果中还包括对象的类型ID,所述根据该对象的类型指针,创建该对象之前,还包括:
确定该类型指针的长度为预设长度,和/或,
确定该类型指针的长度为预设长度、且该对象的类型ID在预设值范围内。
根据本申请实施例的第三方面,提供了一种对象序列化装置,所述装置包括:
获取模块,用于通过反射机制获取对象和与所述对象对应的的类型指针;
类型确定模块,用于根据所述对象的类型指针确定该对象的类型;
序列化模块,用于若该对象的类型为基本类型,则将该对象的类型指针、以及该对象的值进行序列化;若该对象的类型不为基本类型,则将该对象和该对象的各个成员对象各自的类型指针、成员对象的名称、以及成员对象的值进行序列化,其中,各成员对象的类型指针、名称和值在序列化结果中对应存储。
在一种可能的实施方式中,该装置还包括:
类型ID确定模块,根据预置的对象类型与类型ID的对应关系,确定该对象对应的类型ID;
所述序列化模块,用于进行序列化时,将该对象的类型ID一起进行序列化。
在一种可能的实施方式中,所述装置还包括:
类型ID解析模块,用于从对象的序列化结果中获取该对象的类型ID;
显示方式确定模块,用于根据类型ID和显示方式之间的对象关系,确定该对象的显示方式;
显示模块,用于根据确定的显示方式显示该对象。
在一种可能的实施方式中,所述装置还包括:
对象集合更新模块,用于将完成序列化的对象存储在已序列化对象集合中;
第一确定模块,用于在获取模块获取与所述对象对应的类型指针之前,确定该对象不在所述已序列化对象集合中。
在一种可能的实施方式中,所述装置还包括第二确定模块,用于在获取模块获取与所述对象对应的类型指针之前,确定该对象不为空对象。
在一种可能的实施方式中,所述装置还包括:
查询模块,用于在类型确定模块根据所述对象的类型指针确定该对象的类型之后,在预先配置的忽略列表中查询是否存在该对象的类型;
返回模块,用于若存在,则不序列化该对象;若不存在,则触发序列化模块执行若该对象的类型为基本类型,则将该对象的类型指针、以及该对象的值进行序列化;若该对象的类型不为基本类型,则将该对象和该对象的各个成员对象各自的类型指针、成员对象的名称、以及成员对象的值进行序列化,其中,各成员对象的类型指针、名称和值在序列化结果中对应存储。
根据本申请实施例的第四方面,提供了一种对象反序列化装置,包括:
序列化结果获取模块,用于获取对象的序列化结果,该序列化结果中包括该对象的类型指针;
反序列化模块,用于根据该对象的类型指针,创建该对象,其中,若该对象为基本类型从序列化结果中获取该对象的值进行反序列化;若该对象不为基本类型,则根据序列化结果该对象的各成员对象的类型指针创建成员对象,并根据各成员对象的名称和值进行反序列化。
在一种可能的实施方式中,所述序列化结果中还包括对象的类型ID,该装置还包括:
第三确定模块,用于在反序列化模块根据该对象的类型指针,创建该对象之前,确定该类型指针的长度为预设长度,和/或,确定该类型指针的长度为预设长度、且该对象的类型ID在预设值范围内。
根据本申请实施例的第五方面,提供了一种计算设备,包括存储器和处理器,其中,所述存储器用于存储程序指令,所述处理器用于调用所述存储器中存储的程序指令,按照获得的程序指令执行本申请实施例中的任一所述的对象序列化方法。
根据本申请实施例的第六方面,提供了一种计算机存储介质,所述计算机存储介质存储有计算机可执行指令,所述计算机可执行指令用于使计算机执行如本申请实施例中的任一所述的对象序列化方法。
根据本申请实施例的第七方面,提供了一种计算设备,包括存储器和处理器,其中,所述存储器用于存储程序指令,所述处理器用于调用所述存储器中存储的程序指令,按照获得的程序指令执行如本申请实施例所述的任一对象反序列化方法。
根据本申请实施例的第八方面,提供了一种计算机存储介质,所述计算机存储介质存储有计算机可执行指令,所述计算机可执行指令用于使计算机执行如本申请实施例所述的任一对象反序列化方法。
本申请实施例中,获取对象的类型指针,对该对象进行序列化时将该类型指针一起进行序列化。这样,在反序列化时能够根据该类型指针确定对象的类型,达到无需指定对象的目标类型的目的,能够准确反序列化对象。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1示出了现有技术序列化结果的示意图;
图2示出了本申请一个实施例提供的序列化和反序列化方法的架构图之一;
图3示出了本申请一个实施例提供的对象序列化方法的流程图;
图4示出了本申请一个实施例提供的对象的示意图;
图5示出了本申请一个实施例提供的将图4中对象序列化之后的结果示意图之一;
图6示出了本申请一个实施例提供的本申请方案应用于游戏测试的示意图;
图7示出了本申请一个实施例提供的将图4中对象序列化之后的结果示意图之二;
图8示出了本申请一个实施例提供的解析序列化结果进行显示的界面示意图;
图9示出了本申请一个实施例提供的序列化的流程框图;
图10示出了本申请一个实施例提供的对象反序列化的流程图;
图11示出了本申请一个实施例提供的将josn数组反序列化的流程框图;
图12示出了本申请一个实施例提供的对象序列化装置的结构示意图;
图13示出了本申请一个实施例提供的对象反序列化装置的结构示意图;
图14示出了本申请一个实施例提供的服务器的结构示意图;
图15示出了本申请一个实施例提供的终端的结构示意图。
具体实施方式
为使本申请的目的、技术方案和优点更加清楚,下面将结合附图对本申请实施方式作进一步地详细描述。
在本文中提及的“多个”是指两个或两个以上。“和/或”,描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。字符“/”一般表示前后关联对象是一种“或”的关系。为便于列举,下面对本申请实施例中一些名词进行解释:
反射机制,主要是指程序可以访问、检测和修改它本身状态或行为的一种能力。
Json:一种轻量级数据交互格式。
Mono:Unity3D的C#脚本即时编译、执行虚拟机。
序列化(Serialization),将对象将其当前状态写入到临时或持久性存储区的过程。
反序列化,通过从存储区中读取对象的状态,重新创建该对象的过程。
对象的类型指针,用于指示对象的类型信息的存储位置,通过对象的类型指针能够唯一确定一对象并确定给对象的类型。例如,aaa和bbb同为object,通过类型指针可以区分出aaa和bbb。
对象的值,若对象为基本类型,其值为对象的具体值,例如图1中的float型值2.0;若对象不为基本类型,其值为对象内的各成员对象;同理若成员对象不为基本类型,其值为该成员对象的成员对象。
接下来对本申请的基本原理做简要说明:本申请实施例中,在序列化之前,先获取对象的类型指针,该类型指针既适用于基本类型的对象,也适用于非基本类型的对象(例如Class和Struct)。通过该类型指针能够唯一确定该对象并确定该对象的类型。在序列化时,将该对象的类型指针一起序列化,则序列化结果中将保留该对象的类型指针。这样,在反序列化时,根据该类型指针就能够确定对象的类型,并可以唯一确定一个对象。相对于现有技术,反序列化时无需指定类型,可以准确的还原对象。
下面对本申请实施例能够适用的应用场景做一些简单介绍,需要说明的是,该应用场景仅用于说明本申请实施例而非限定。具体实施时,可以根据实际需要应用本申请实施例提供的技术方案。
参考图2,其为本申请实施例提供的应用场景示意图之一,该场景例如可以包括用户20、终端设备21和服务器22。其中,终端设备21中可安装有各种客户端,如游戏应用等。
以测试游戏为例,具体实施时,游戏应用将待发送的对象进行序列化后显示给测试人员用于测试,然后将对象进行反序列化,并通过游戏数据发送接口将游戏发送给游戏服务器。
其中,终端设备21和服务器22可通过通信网络进行通信连接,该网络可以为局域网、广域网等。终端设备21可以为手机、平板电脑、笔记本电脑、个人计算机等。
为便于进一步说明本申请实施例提供的技术方案,下面结合具体实施例对此作进一步说明。
参考图3,其为本申请实施例提供的对象序列化方法的流程图,包括:
步骤301:通过反射机制获取对象和与对象对应的类型指针。
其中,在一个实施例中,可以通过mono的接口获取该对象的类型指针。
例如,针对对象a,通过其类型指针可以确定其为对象a、且可以确定其类型。
步骤302:根据对象的类型指针确定该对象的类型。
步骤303:若该对象的类型为基本类型,则将该对象的类型指针、以及该对象的值进行序列化。
例如,针对图1中int型的i,其序列化结果可表示为<****,1>,其中“****”表示该对象的类型指针,“1”为该对象的值。
具体实施时,可以将对象序列化为josn格式。
步骤304:若该对象的类型不为基本类型,则将该对象和该对象的各个成员对象各自的类型指针、成员对象的名称、以及成员对象的值进行序列化,其中,各成员对象的类型指针、名称和值在序列化结果中对应存储。
例如,如图4所示,类中包括两个成员对象,分别为page_friend_count和page_index。根据本申请提供的方案对其进行序列化,得到的序列化结果如图5所示。在图5中,“3403336000”为该类的类型指针,其中还包括两个成员对象的名称,“3731316224”为成员对象的类型指针,50为成员对象“page_friend_count”的值,0为成员对象“page_index”的值。
其中,在一个实施例中,在进行协议测试时,通常通过抓取客户端和服务器之间交互的二进制数据流,再根据项目组提供的协议结构文件,对二进制数据流进行解析并以列表显示出来。这样,测试人员可以直接操作UI进行协议修改、重发,可大大提高游戏测试效率。以游戏为例,游戏在架构时,都会确定协议类型,自硏手游大多使用TDR(自研)或PB(ProtoBuf缩写),代理或者外部手游的大多使用PB或自定义协议。其中,TDR和PB均有协议文件,可用于解密二进制数据流。在对代理或者外部游戏进行SRSelective-Repeat协议接入时,可能因为项目保密无法拿到协议文件,或者因为自定义协议格式无协议文件或协议无法解析,那么就难以进行测试。
有鉴于此,本申请实施例中,可以不对二进制数据流进行解析,而是对对象进行解析并显示,这样无需关心具体的协议。具体实施时,只需要捕获对象,并对对象进行序列化,然后解析显示即可。
以测试游戏为例,本申请实施例中测试的过程可概述为图6所示。不进行测试时,游戏应用打包协议对象然后将二进制数据通过发送接口发送出去。测试时,本申请实施例中,将协议对象进行序列化,然后发送到用于用于测试的应用中进行解析并显示。重发时反序列化对象,然后进入打包协议对象的步骤通过原始的发送接口发送出去。
为了便于解析显示对象,本申请实施例中还可以在序列化结果中包括对象的类型ID,类型ID为数值型,可以便于传输和使用。具体实施时,可以根据预置的对象类型与类型ID的对应关系,确定该对象对应的类型ID;进行序列化时,将该对象的类型ID一起进行序列化。
即,若对象为基本类型的对象,则将该对象的类型指针、类型ID以及该对象的值进行序列化;若对象不为基本类型的对象,则将该对象和该对象的各个成员对象各自的类型指针、成员对象的名称、成员对象的值、对象以及成员对象各自的类型ID进行序列化。
继续图4中的例子,添加类型ID后序列化的结果如图7所示。图7中加有下划线的1、8即为类型ID。
有了类型ID后,可以从对象的序列化结果中获取该对象的类型ID;根据类型ID和显示方式之间的对象关系,确定该对象的显示方式;根据确定的显示方式显示该对象。
类型ID可以和显示时数据类型相关,例如如表1所示。表1中Ii(i=1、2、4、8)、Ui(i=1、2、4、8)、Ri(i=4、8)均表示数字,i表示字节数,故此Ii、Ui、Ri表示数字大小不同,具体实施时可以根据实际需求配置。需要说明的是表1仅用于说明本申请实施例,而不用于限定。具体实施时,可以根据实际需要设计表1。
根据表1自定义类型ID为8时,对应的是整数型数据,图4中为游戏过程中的对象。图4中的对象可显示为如图8所示。将对象page_friend_count和page_index显示出来,可以便于测试人员进行测试。
当然,具体实施时,显示方式还可以包括显示时的颜色、字体大小等本申请对此不做限定。
当存在循环引用对象时,序列化会无线递归导致序列化失败。为解决该问题,本申请实施例中,预先创建对象集合,将完成序列化的对象存储在已序列化对象集合中;在获取与对象对应的类型指针之前,可以先确定该对象是否在所述已序列化对象集合中,若在该集合中,则说明是循环引用对象,可以不序列化该对象,若不在该集合中,则可以执行后续操作序列化该对象。这样,通过记录已经序列化的对象,可以确定出循环引用对象从而避免无线递归,保证序列化的正常进行。
进一步的,由于空对象无需进行序列化,故此,本申请实施例中,获取该对象的类型指针之前,还可以确定对象是否空对象,例如可以确定该对象的指针是否为0,若是则确定为空对象,否则不为空对象。
其中,在一个实施例中,在特殊的应用场合例如协议测试时,只需要对某些特定类型的对象进行测试。为了实现按需进行序列化,可以预先配置忽略列表,该列表中可以配置无需序列化的对象的类型。具体实施时,在根据对象的类型指针确定该对象的类型之后,可以在预先配置的忽略列表中查询是否存在该对象的类型;若存在,则不序列化该对象;若不存在,则执行序列化的步骤。
当然,具体实施时,也可以配置序列化列表,该列表中配置需要序列化的对象的类型,若对象的类型在该列表中则进行序列化,否则不进行序列化。配置何种列表,可以根据实际需要确定,例如需要序列化的类型多,则为了提高查表的效率可以配置忽略列表。同理,不需要序列化的类型多,则可以配置序列化列表。
综上所述,本申请实施例中,序列化的过程可概述为图9所示:通过反射机制获取对象后,可以对该对象进行预检测,预检测包括前述的确定该对象是否是循环引用对象和确定给对象是否在忽略列表中。若预检测通过(即该对象不是协议对象也没有在忽略列表中),则进行后续的序列化过程。即首先获取类型指针,然后确定对象是否是基本类型对象,若是,对写入该对象的类型ID及其值完成序列化,若否,则获取所有成员对象的类型指针和名称,确定成员对象的类型ID,并写入成员对象的值后完成序列化。
综上所述,本申请实施例中,通过将类型指针序列化,使得后续反序列化可以根据类型指针确定对象的类型从而准确还原对象。此外,本申请中,无需额外指定对象的目标类型,使得序列化可以动态进行,即在程序运行的过程中进行。
基于相同的发明构思,本申请实施例中,还提供一种对象反序列化方法,如图10所示,为该方法的流程示意图,包括:
步骤1001:获取对象的序列化结果,该序列化结果中包括该对象的类型指针。
步骤1002:根据该对象的类型指针,创建该对象,其中,若该对象为基本类型从序列化结果中获取该对象的值进行反序列化;若该对象不为基本类型,则根据序列化结果该对象的各成员对象的类型指针创建成员对象,并根据各成员对象的名称和值进行反序列化。
这样,对象的类型无需指定,而是根据序列化结果中的类型指针来确定。故此,能够准确反序列化对象。
进一步的,为检测序列化结果是否异常,进而保证能够正常的进行反序列化,本申请实施例中,反序列化之前可以进行预判定。
如图11所示,本申请实施例中反序列化的流程框图:其中,josn数组为序列化结果。
这里对图11不做赘述,仅对其预判定做进一步解释。其中,类型指针具有指定的预设长度。所述根据该对象的类型指针,创建该对象之前,还可以确定该类型指针的长度是否为预设长度,若是预设长度则可以进行反序列化,否则无需进行反序列化。同理,在所述序列化结果中还包括对象的类型ID时,该类型ID在一定的值范围内,反序列化前,可以进一步确定对象的类型ID是否在预设值范围内,若是则表示可以反序列化,否则无需反序列化。故此,预判定通过,是指预判定结果为能够继续反序列化的结果,反之,预判定结果为不能够继续反序列化则处理下一对象的序列化结果。
下述为本申请装置实施例,对于装置实施例中未详尽描述的细节,可以参考上述一一对应的方法实施例。
请参考图12,其示出了本申请一个实施例提供的对象序列化装置的结构方框图,该装置通过硬件或者软硬件的结合实现成为图2中的终端21或服务器22,该装置包括:
获取模块1201,用于通过反射机制获取对象和与所述对象对应的类型指针
类型确定模块1202,用于根据所述对象的类型指针确定该对象的类型;
序列化模块1203,用于若该对象的类型为基本类型,则将该对象的类型指针、以及该对象的值进行序列化;若该对象的类型不为基本类型的对象,则将该对象和该对象的各个成员对象各自的类型指针、成员对象的名称、以及成员对象的值进行序列化,其中,各成员对象的类型指针、名称和值在序列化结果中对应存储。
进一步的,该装置还包括:
类型ID确定模块1204,根据预置的对象类型与类型ID的对应关系,确定该对象对应的类型ID;
所述序列化模块1203,用于进行序列化时,将该对象的类型ID一起进行序列化。
进一步的,所述装置还包括:
类型ID解析模块1205,用于从对象的序列化结果中获取该对象的类型ID;
显示方式确定模块1206,用于根据类型ID和显示方式之间的对象关系,确定该对象的显示方式;
显示模块1207,用于根据确定的显示方式显示该对象。
进一步的,所述装置还包括:
对象集合更新模块1208,用于将完成序列化的对象存储在已序列化对象集合中;
第一确定模块1209,用于在获取模块1201获取与所述对象对应的类型指针之前,确定该对象不在所述已序列化对象集合中。
进一步的,所述装置还包括第二确定模块1210,用于在获取模块1201获取与所述对象对应的类型指针之前,确定该对象不为空对象。
进一步的,所述装置还包括:
查询模块1211,用于在类型确定模块1202根据所述对象的类型指针确定该对象的类型之后,在预先配置的忽略列表中查询是否存在该对象的类型;
返回模块1212,用于若存在,则不序列化该对象;若不存在,则触发序列化模块1203执行若该对象的类型为基本类型,则将该对象的类型指针、以及该对象的值进行序列化;若该对象的类型不为基本类型,则将该对象和该对象的各个成员对象各自的类型指针、成员对象的名称、以及成员对象的值进行序列化,其中,各成员对象的类型指针、名称和值在序列化结果中对应存储。
请参考图13,其示出了本申请一个实施例提供的对象反序列化装置的结构方框图,该装置通过硬件或者软硬件的结合实现成为图2中的终端21或服务器22,该装置包括:
序列化结果获取模块1301,用于获取对象的序列化结果,该序列化结果中包括该对象的类型指针;
反序列化模块1302,用于根据该对象的类型指针,创建该对象,其中,若该对象为基本类型从序列化结果中获取该对象的值进行反序列化;若该对象不为基本类型,则根据序列化结果该对象的各成员对象的类型指针创建成员对象,并根据各成员对象的名称和值进行反序列化。
进一步的,所述序列化结果中还包括对象的类型ID,该装置还包括:
第三确定模块1303,用于在反序列化模块1302根据该对象的类型指针,创建该对象之前,确定该类型指针的长度为预设长度,和/或,确定该类型指针的长度为预设长度、且该对象的类型ID在预设值范围内。
接下来,请参考图14,其示出了本申请一个实施例提供的服务器的结构方框图。该服务器1400实现为图2中的服务器22。具体来讲:
服务器1400包括中央处理单元(CPU)1401、包括随机存取存储器(RAM)1402和只读存储器(ROM)1403的系统存储器1404,以及连接系统存储器1404和中央处理单元1401的系统总线1405。所述服务器1400还包括帮助计算机内的各个器件之间传输信息的基本输入/输出系统(I/O系统)1406,和用于存储操作系统1413、应用程序1414和其他程序模块1415的大容量存储设备1407。
所述基本输入/输出系统1406包括有用于显示信息的显示器1408和用于用户输入信息的诸如鼠标、键盘之类的输入设备1409。其中所述显示器1408和输入设备1409都通过连接到系统总线1405的输入输出控制器1410连接到中央处理单元1401。所述基本输入/输出系统1406还可以包括输入输出控制器1410以用于接收和处理来自键盘、鼠标、或电子触控笔等多个其他设备的输入。类似地,输入输出控制器1410还提供输出到显示屏、打印机或其他类型的输出设备。
所述大容量存储设备1407通过连接到系统总线1405的大容量存储控制器(未示出)连接到中央处理单元1401。所述大容量存储设备1407及其相关联的计算机可读介质为服务器1400提供非易失性存储。也就是说,所述大容量存储设备1407可以包括诸如硬盘或者CD-ROM驱动器之类的计算机可读介质(未示出)。
不失一般性,所述计算机可读介质可以包括计算机存储介质和通信介质。计算机存储介质包括以用于存储诸如计算机可读指令、数据结构、程序模块或其他数据等信息的任何方法或技术实现的易失性和非易失性、可移动和不可移动介质。计算机存储介质包括RAM、ROM、EPROM、EEPROM、闪存或其他固态存储其技术,CD-ROM、DVD或其他光学存储、磁带盒、磁带、磁盘存储或其他磁性存储设备。当然,本领域技术人员可知所述计算机存储介质不局限于上述几种。上述的系统存储器1404和大容量存储设备1407可以统称为存储器。
根据本申请的各种实施例,所述服务器1400还可以通过诸如因特网等网络连接到网络上的远程计算机运行。也即服务器1400可以通过连接在所述系统总线1405上的网络接口单元1411连接到网络1412,或者说,也可以使用网络接口单元1411来连接到其他类型的网络或远程计算机系统(未示出)。
所述存储器还包括一个或者一个以上的程序,所述一个或者一个以上程序存储于存储器中,所述一个或者一个以上程序包含用于进行本申请实施例提供的对象序列化方法和/或对象反序列化方法的指令。
本领域普通技术人员可以理解上述实施例的签到方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,该程序可以存储于一计算机可读存储介质中,存储介质可以包括:只读存储器(ROM,Read Only Memory)、随机存取记忆体(RAM,RandomAccess Memory)、磁盘或光盘等。
请参考图15,其示出了本申请一个实施例提供的终端的结构示意图。该终端1500为图1中的终端。具体来讲:
终端1500可以包括RF(Radio Frequency,射频)电路1510、包括有一个或一个以上计算机可读存储介质的存储器1520、输入单元1530、显示单元1540、传感器1550、音频电路1560、近场通信模块1570、包括有一个或者一个以上处理核心的处理器1580、以及电源1590等部件。本领域技术人员可以理解,图13中示出的终端结构并不构成对终端的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。其中:
RF电路1510可用于收发信息或通话过程中,信号的接收和发送,特别地,将基站的下行信息接收后,交由一个或者一个以上处理器1580处理。通常,RF电路1510包括但不限于天线、至少一个放大器、调谐器、一个或多个振荡器、用户身份模块(SIM)卡、收发信机、耦合器、LNA(Low Noise Amplifier,低噪声放大器)、双工器等。此外,RF电路1510还可以通过无线通信与网络和其他设备通信。所述无线通信可以使用任一通信标准或协议,包括但不限于GSM(Global System of Mobile communication,全球移动通讯系统)、GPRS(GeneralPacket Radio Service,通用分组无线服务)、CDMA(Code Division Multiple Access,码分多址)、WCDMA(Wideband Code Division Multiple Access,宽带码分多址)、LTE(LongTerm Evolution,长期演进)、电子邮件、SMS(Short Messaging Service,短消息服务)等。
存储器1520可用于存储软件程序以及模块,处理器1580通过运行存储在存储器1520的软件程序以及模块,从而执行各种功能应用以及数据处理。存储器1520可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序(比如声音播放功能、图像播放功能等)等;存储数据区可存储根据终端1500的使用所创建的数据(比如音频数据、电话本等)等。此外,存储器1520可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。相应地,存储器1520还可以包括存储器控制器,以提供处理器1580和输入单元1530对存储器1520的访问。
输入单元1530可用于接收输入的数字或字符信息,以及产生与用户设置以及功能控制有关的键盘、鼠标、操作杆、光学或者轨迹球信号输入。具体地,输入单元1530可包括图像输入设备1531以及其他输入设备1532。图像输入设备1531可以是摄像头,也可以是光电扫描设备。除了图像输入设备731,输入单元1530还可以包括其他输入设备1532。具体地,其他输入设备1532可以包括但不限于物理键盘、功能键(比如音量控制按键、开关按键等)、轨迹球、鼠标、操作杆等中的一种或多种。
显示单元1540可用于显示由用户输入的信息或提供给用户的信息以及终端1500的各种图形用户接口,这些图形用户接口可以由图形、文本、图标、视频和其任意组合来构成。显示单元1540可包括显示面板1541,可选的,可以采用LCD(Liquid Crystal Display,液晶显示器)、OLED(Organic Light-Emitting Diode,有机发光二极管)等形式来配置显示面板1541。
终端1500还可包括至少一种传感器1550,比如光传感器、运动传感器以及其他传感器。具体地,光传感器可包括环境光传感器及接近传感器,其中,环境光传感器可根据环境光线的明暗来调节显示面板1541的亮度,接近传感器可在终端1500移动到耳边时,关闭显示面板1541和/或背光。作为运动传感器的一种,重力加速度传感器可检测各个方向上(一般为三轴)加速度的大小,静止时可检测出重力的大小及方向,可用于识别手机姿态的应用(比如横竖屏切换、相关游戏、磁力计姿态校准)、振动识别相关功能(比如计步器、敲击)等;至于终端1500还可配置的陀螺仪、气压计、湿度计、温度计、红外线传感器等其他传感器,在此不再赘述。
音频电路1560、扬声器1561,传声器1562可提供用户与终端1500之间的音频接口。音频电路1560可将接收到的音频数据转换后的电信号,传输到扬声器1561,由扬声器1561转换为声音信号输出;另一方面,传声器1562将收集的声音信号转换为电信号,由音频电路1560接收后转换为音频数据,再将音频数据输出处理器1580处理后,经RF电路1515以发送给比如另一电子设备,或者将音频数据输出至存储器1520以便进一步处理。音频电路1560还可能包括耳塞插孔,以提供外设耳机与终端1500的通信。
终端1500通过近场通信模块1570与外部设备建立近场通信连接,并通过该近场通信连接进行数据交互。本实施例中,该近场通信模块1570具体包括蓝牙模块和/或WiFi模块。
处理器1580是终端1500的控制中心,利用各种接口和线路连接整个手机的各个部分,通过运行或执行存储在存储器1520内的软件程序和/或模块,以及调用存储在存储器1520内的数据,执行终端1500的各种功能和处理数据,从而对手机进行整体监控。可选的,处理器1580可包括一个或多个处理核心;优选的,处理器1580可集成应用处理器和调制解调处理器,其中,应用处理器主要处理操作系统、用户界面和应用程序等,调制解调处理器主要处理无线通信。可以理解的是,上述调制解调处理器也可以不集成到处理器1580中。
终端1500还包括给各个部件供电的电源1590(比如电池),优选的,电源可以通过电源管理系统与处理器1580逻辑相连,从而通过电源管理系统实现管理充电、放电、以及功耗管理等功能。电源1590还可以包括一个或一个以上的直流或交流电源、再充电系统、电源故障检测电路、电源转换器或者逆变器、电源状态指示器等任意组件。
尽管未示出,终端1500还可以包括蓝牙模块等,在此不再赘述。
具体在本实施例中,终端1500还包括有存储器,以及一个或者一个以上的程序,其中一个或者一个以上程序存储于存储器中,且经配置以由一个或者一个以上处理器执行以实现上述对象序列化方法和/或对象反序列方法。
本领域普通技术人员可以理解上述实施例的签到方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,该程序可以存储于计算机可读存储介质中,存储介质可以包括:只读存储器(ROM,Read Only Memory)、随机存取记忆体(RAM,Random AccessMemory)、磁盘或光盘等。
上述本申请实施例序号仅仅为了描述,不代表实施例的优劣。
以上所述仅为本申请的较佳实施例,并不用以限制本申请,凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。

Claims (15)

1.一种对象序列化方法,其特征在于,所述方法包括:
通过反射机制获取对象和与所述对象对应的类型指针;
根据所述对象的类型指针确定该对象的类型;
若该对象的类型为基本类型,则将该对象的类型指针、以及该对象的值进行序列化;
若该对象的类型不为基本类型的对象,则将该对象和该对象的各个成员对象各自的类型指针、成员对象的名称、以及成员对象的值进行序列化,其中,各成员对象的类型指针、名称和值在序列化结果中对应存储。
2.根据权利要求1所述的方法,其特征在于,所述方法还包括:
根据预置的对象类型与类型标识的对应关系,确定该对象对应的类型标识;
进行序列化时,将该对象的类型标识一起进行序列化。
3.根据权利要求2所述的方法,其特征在于,所述方法还包括:
从对象的序列化结果中获取该对象的类型标识;
根据类型标识和显示方式之间的对象关系,确定该对象的显示方式;
根据确定的显示方式显示该对象。
4.根据权利要求1-3中任一所述的方法,其特征在于,所述方法还包括:
将完成序列化的对象存储在已序列化对象集合中;
获取该对象的类型指针之前,还包括:
确定该对象不在所述已序列化对象集合中。
5.根据权利要求1-3中任一所述的方法,其特征在于,获取与所述对象对应的类型指针之前,所述方法还包括:
确定该对象不为空对象。
6.根据权利要求1-3中任一所述的方法,其特征在于,根据所述对象的类型指针确定该对象的类型之后,所述方法还包括
在预先配置的忽略列表中查询是否存在该对象的类型;
若存在,则不序列化该对象;
若不存在,则执行若为基本类型的对象,则将该对象的类型指针、以及该对象的值进行序列化;若不为基本类型的对象,则将该对象和该对象的各个成员对象各自的类型指针、成员对象的名称、以及成员对象的值进行序列化,其中,各成员对象的类型指针、名称和值在序列化结果中对应存储的步骤。
7.一种对象反序列化方法,其特征在于,包括:
获取对象的序列化结果,该序列化结果中包括该对象的类型指针;
根据该对象的类型指针,创建该对象,其中,若该对象为基本类型从序列化结果中获取该对象的值进行反序列化;若该对象不为基本类型,则根据序列化结果该对象的各成员对象的类型指针创建成员对象,并根据各成员对象的名称和值进行反序列化。
8.根据权利要求7所述的方法,其特征在于,所述序列化结果中还包括对象的类型标识,所述根据该对象的类型指针,创建该对象之前,还包括:
确定该类型指针的长度为预设长度,和/或,
确定该类型指针的长度为预设长度、且该对象的类型标识在预设值范围内。
9.一种对象序列化装置,其特征在于,所述装置包括:
获取模块,用于通过反射机制获取对象和与所述对象对应的的类型指针;
类型确定模块,用于根据所述对象的类型指针确定该对象的类型;
序列化模块,用于若该对象的类型为基本类型,则将该对象的类型指针、以及该对象的值进行序列化;若该对象的类型不为基本类型,则将该对象和该对象的各个成员对象各自的类型指针、成员对象的名称、以及成员对象的值进行序列化,其中,各成员对象的类型指针、名称和值在序列化结果中对应存储。
10.根据权利要求9所述的装置,其特征在于,所述装置还包括:
类型ID确定模块,根据预置的对象类型与类型标识的对应关系,确定该对象对应的类型标识;
所述序列化模块,用于进行序列化时,将该对象的类型标识一起进行序列化。
11.根据权利要求11所述的装置,其特征在于,所述装置还包括:
类型ID解析模块,用于从对象的序列化结果中获取该对象的类型标识;
显示方式确定模块,用于根据类型标识和显示方式之间的对象关系,确定该对象的显示方式;
显示模块,用于根据确定的显示方式显示该对象。
12.根据权利要求9-11中任一所述的装置,其特征在于,所述装置还包括:
对象集合更新模块,用于将完成序列化的对象存储在已序列化对象集合中;
第一确定模块,用于在获取模块获取与所述对象对应的类型指针之前,确定该对象不在所述已序列化对象集合中。
13.一种对象反序列化装置,其特征在于,包括:
序列化结果获取模块,用于获取对象的序列化结果,该序列化结果中包括该对象的类型指针;
反序列化模块,用于根据该对象的类型指针,创建该对象,其中,若该对象为基本类型从序列化结果中获取该对象的值进行反序列化;若该对象不为基本类型,则根据序列化结果该对象的各成员对象的类型指针创建成员对象,并根据各成员对象的名称和值进行反序列化。
14.一种计算机存储介质,其特征在于,所述计算机存储介质存储有计算机可执行指令,所述计算机可执行指令用于使计算机执行如权利要求1~6任一所述的对象序列化方法。
15.一种计算机存储介质,其特征在于,所述计算机存储介质存储有计算机可执行指令,所述计算机可执行指令用于使计算机执行如权利要求7或8所述的对象反序列化方法。
CN201810150509.2A 2018-02-13 2018-02-13 对象序列化和反序列化方法及相关装置 Active CN108415741B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201810150509.2A CN108415741B (zh) 2018-02-13 2018-02-13 对象序列化和反序列化方法及相关装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201810150509.2A CN108415741B (zh) 2018-02-13 2018-02-13 对象序列化和反序列化方法及相关装置

Publications (2)

Publication Number Publication Date
CN108415741A true CN108415741A (zh) 2018-08-17
CN108415741B CN108415741B (zh) 2020-08-04

Family

ID=63128786

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201810150509.2A Active CN108415741B (zh) 2018-02-13 2018-02-13 对象序列化和反序列化方法及相关装置

Country Status (1)

Country Link
CN (1) CN108415741B (zh)

Cited By (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109343836A (zh) * 2018-08-31 2019-02-15 阿里巴巴集团控股有限公司 数据序列化、数据反序列方法、装置及设备
CN110516207A (zh) * 2019-08-02 2019-11-29 深圳市菲菱科思通信技术股份有限公司 一种json文件和excel文件相互转化方法
CN110941655A (zh) * 2018-09-21 2020-03-31 中移(杭州)信息技术有限公司 一种数据格式转换方法及装置
CN111309620A (zh) * 2020-02-24 2020-06-19 腾讯科技(成都)有限公司 一种游戏协议测试方法、装置、电子设备和存储介质
CN112044056A (zh) * 2020-07-29 2020-12-08 成都完美天智游科技有限公司 实体切换方法及装置、设备、系统、介质
CN112925768A (zh) * 2021-03-03 2021-06-08 北京中安星云软件技术有限公司 一种基于Protobuf协议的HBASE数据库解析方法及系统
CN115080061A (zh) * 2022-06-28 2022-09-20 中国电信股份有限公司 反序列化攻击检测方法、装置、电子设备及介质

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20080178150A1 (en) * 2007-01-19 2008-07-24 Microsoft Corporation Complex time zone techniques
CN105787128A (zh) * 2016-03-29 2016-07-20 四川秘无痕信息安全技术有限责任公司 一种恢复Java序列化文件数据的方法
CN106502635A (zh) * 2015-09-08 2017-03-15 北京国双科技有限公司 数据处理方法和装置
CN106843819A (zh) * 2015-12-03 2017-06-13 北京国双科技有限公司 对象序列化的方法及装置

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20080178150A1 (en) * 2007-01-19 2008-07-24 Microsoft Corporation Complex time zone techniques
CN106502635A (zh) * 2015-09-08 2017-03-15 北京国双科技有限公司 数据处理方法和装置
CN106843819A (zh) * 2015-12-03 2017-06-13 北京国双科技有限公司 对象序列化的方法及装置
CN105787128A (zh) * 2016-03-29 2016-07-20 四川秘无痕信息安全技术有限责任公司 一种恢复Java序列化文件数据的方法

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
胡晨光等: "一种类的序列化与反序列化框架", 《电脑知识与技术》 *

Cited By (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109343836A (zh) * 2018-08-31 2019-02-15 阿里巴巴集团控股有限公司 数据序列化、数据反序列方法、装置及设备
CN110941655A (zh) * 2018-09-21 2020-03-31 中移(杭州)信息技术有限公司 一种数据格式转换方法及装置
CN110516207A (zh) * 2019-08-02 2019-11-29 深圳市菲菱科思通信技术股份有限公司 一种json文件和excel文件相互转化方法
CN110516207B (zh) * 2019-08-02 2023-09-22 深圳市菲菱科思通信技术股份有限公司 一种json文件和excel文件相互转化方法
CN111309620A (zh) * 2020-02-24 2020-06-19 腾讯科技(成都)有限公司 一种游戏协议测试方法、装置、电子设备和存储介质
CN111309620B (zh) * 2020-02-24 2024-05-07 腾讯科技(成都)有限公司 一种游戏协议测试方法、装置、电子设备和存储介质
CN112044056A (zh) * 2020-07-29 2020-12-08 成都完美天智游科技有限公司 实体切换方法及装置、设备、系统、介质
CN112925768A (zh) * 2021-03-03 2021-06-08 北京中安星云软件技术有限公司 一种基于Protobuf协议的HBASE数据库解析方法及系统
CN112925768B (zh) * 2021-03-03 2024-02-27 北京中安星云软件技术有限公司 一种基于Protobuf协议的HBASE数据库解析方法及系统
CN115080061A (zh) * 2022-06-28 2022-09-20 中国电信股份有限公司 反序列化攻击检测方法、装置、电子设备及介质
CN115080061B (zh) * 2022-06-28 2023-09-29 中国电信股份有限公司 反序列化攻击检测方法、装置、电子设备及介质

Also Published As

Publication number Publication date
CN108415741B (zh) 2020-08-04

Similar Documents

Publication Publication Date Title
CN108415741A (zh) 对象序列化和反序列化方法及相关装置
CN105404585B (zh) 获取代码覆盖率的方法及装置
CN106502906B (zh) 一种测试应用程序的方法和装置
US7630708B2 (en) Tester for determining the validity of a feature in a remote device
CN107273160A (zh) 一种版本升级的方法及装置
CN103702297B (zh) 短信增强方法、装置及系统
CN104519485B (zh) 一种终端之间的通信方法、装置和系统
CN106708554B (zh) 程序运行方法及装置
CN110032512A (zh) 一种小程序的调试方法、相关设备及终端
CN110058850A (zh) 一种应用的开发方法、装置以及存储介质
CN105389259B (zh) 一种进行应用程序测试的方法、装置及系统
CN103631580B (zh) 一种生成主题图标的方法和装置
CN103400592A (zh) 录音方法、播放方法、装置、终端及系统
CN103488939A (zh) 一种提示用户的方法、装置及终端
CN103763112B (zh) 一种用户身份保护方法和装置
CN110034876A (zh) Pucch资源指示、处理方法、网络侧设备、用户终端
CN107103211B (zh) Sdk发送、应用发布、应用运行方法及装置
CN108280341A (zh) 渠道号添加、安装包校验方法及装置
CN108073495A (zh) 应用程序崩溃原因的定位方法及装置
CN110196795A (zh) 检测移动终端应用运行状态的方法及相关装置
CN110046497A (zh) 一种函数挂钩实现方法、装置和存储介质
CN106294108A (zh) 应用程序测试方法及装置
CN107396193B (zh) 视频播放的方法和装置
CN103581762A (zh) 一种播放网络视频的方法、装置及终端设备
CN111712794B (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