序列化消息之间的转换方法和装置与流程

文档序号:18922682发布日期:2019-10-19 03:44阅读:157来源:国知局
序列化消息之间的转换方法和装置与流程

本发明涉及数据处理技术领域,特别涉及一种序列化消息之间的转换方法和装置。



背景技术:

随着互联网的发展以及云计算的应用,大型的分布式系统越来越多,消息序列化是分布式系统中重要的一环,它像血液一样负责服务集群之间的消息传递。在消息序列化中常见的序列化协议包括自解释的序列化协议如XML(Extensible Markup Language,扩展性标识语言)协议,基于二进制的序列化协议ProtocolBuffer(协议缓存,简称为PB)和JSON(JavaScript Object Notation,JavaScript对象标记)协议等。

目前,一种服务器一般仅支持一种格式的序列化协议,如WEB(网页)服务器仅支持XML格式或JSON格式的协议,而业务服务器一般仅支持PB格式的协议。

现有方案至少具有如下缺陷:

由于现有服务器一般仅能支持单一格式的消息,限制了服务器之间的消息传递方式,如仅能按照XML格式传输消息或者仅能按照PB格式传输消息,而XML格式消息的消息体较大、运行效率较差,PB格式的消息可读性较差。现有方案中服务器的消息传递的方式不灵活、消息传输性能低下。



技术实现要素:

鉴于上述问题,本发明实施例提供了一种序列化消息之间的转换方法和相应的序列化消息之间的转换装置,以解决现有方案中服务器之间消息传递的方式不灵活、消息传输性能低下的问题等。

为了达到上述目的,本发明实施例采用的技术方案如下:

一方面,本发明实施例提供了一种序列化消息之间的转换方法,包括:

按照第一序列化消息的第一结构以及第一结构与第二序列化消息的第二结构之间的对应关系,利用设置的序列化描述项生成序列化数据结构;其中,第一序列化消息具有第一格式,第二序列化消息具有第二格式;序列化描述项包括数据结构描述项和设置在数据结构描述项之中的字段描述项,各数据结构描述项的结构及数据结构描述项之中各字段描述项的结构与第一结构相一致;对符合第一结构的第一格式的待转换序列化消息,根据序列化数据结构对待转换序列化消息进行解析,将解析出的数据写入序列化数据结构中,得到数据写入后的序列化数据结构;提取数据写入后的序列化数据结构中的数据;按照序列化数据结构中记录的对应关系,将提取出的数据转换为具有第二结构的第二格式的序列化消息。

另一方面,本发明实施例提供了一种序列化消息之间的转换装置,包括:

数据结构生成单元,用于按照第一序列化消息的第一结构以及第一结构与第二序列化消息的第二结构之间的对应关系,利用设置的序列化描述项生成序列化数据结构;其中,第一序列化消息具有第一格式,第二序列化消息具有第二格式;序列化描述项包括数据结构描述项和设置在数据结构描述项之中的字段描述项,各数据结构描述项的结构及数据结构描述项之中各字段描述项的结构与第一结构相一致;

解析写入单元,用于对符合第一结构的第一格式的待转换序列化消息,根据序列化数据结构对待转换序列化消息进行解析,将解析出的数据写入序列化数据结构中,得到数据写入后的序列化数据结构;

数据提取单元,用于提取数据写入后的序列化数据结构中的数据;

转换单元,用于按照序列化数据结构中记录的对应关系,将提取出的数据转换为具有第二结构的第二格式的序列化消息。

由上所述,本发明实施例采用由设置的序列化描述项生成序列化数据结构,将第一格式的待转换序列化消息写入序列化数据结构,再从数据写入后的序列化数据结构中将数据提取出来转换为第二格式的序列化消息的技术手段,能通过一种序列化数据结构兼容多种格式的序列化消息,使服务器能够对不同格式的序列化消息进行方便、快速的转换,根据实际需求选取特定格式的序列化协议来传输序列化消息,例如,在服务器外部采用XML格式传输消息,以继承XML格式在系统中应用的广泛性,在服务器内部采用PB格式传输消息,以继承PB格式的高效性,从而提高了服务器传递消息的灵活性,优化了消息传输性能。

附图说明

图1示出了根据本发明一个实施例的一种序列化消息之间的转换方法流程图;

图2示出了根据本发明又一个实施例的按照序列化数据结构对XML序列化消息进行解析的方法示意图;

图3示出了根据本发明又一个实施例的从数据写入的序列化数据结构中输出PB序列化消息的流程图;

图4示出了根据本发明又一个实施例的按照序列化数据结构对PB消息进行解析的方法示意图;

图5示出了根据本发明又一个实施例的从数据写入的序列化数据结构中输出XML序列化消息的流程图;

图6示出了根据本发明又一个实施例的一种序列化消息之间的转换装置的结构示意图。

具体实施方式

为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明实施方式作进一步地详细描述。

本发明一个实施例提供了一种序列化消息之间的转换方法,参见图1,该方法包括如下步骤:

S100:按照第一序列化消息的第一结构以及该第一结构与第二序列化消息的第二结构之间的对应关系,利用设置的序列化描述项生成序列化数据结构,其中该第一序列化消息具有第一格式,该第二序列化消息具有第二格式。

上述第一格式、第二格式分别对应一种序列化协议的数据格式,如XML(Extensible Markup Language,扩展性标识语言)格式、PB(协议缓存,简称为PB)格式或JSON(JavaScript Object Notation,JavaScript对象标记)格式等等,其中第一格式不同于第二格式。

序列化数据结构是序列化消息之间互相转化的桥梁,其包含若干个序列化描述项。一个序列化描述项代表一个可被序列化的类型或字段,用来描述序列化时的规则。

序列化描述项包括数据结构描述项和字段描述项。数据结构描述项是一系列字段描述项的集合,一个数据结构描述项中可以包含多个字段描述项,数据结构描述项中同样可以嵌套另一种数据结构,即在数据结构描述项中设置子数据结构描述项,从而支持复杂的数据类型。

子数据结构描述项与数据结构描述项基本相同,主要区别在于子数据结构描述项中还需要包括一种关系信息,由这种关系信息建立位于同一数据结构描述项中的子数据结构描述项与字段描述项的关系。

各数据结构描述项的结构及数据结构描述项之中各字段描述项、子数据描述项(若存在时)的结构需要与第一结构相一致。下面结合示例进行说明。

示例性的,当第一格式为XML格式时,具有第一结构的第一序列化消息(XML序列化消息)的一个例子如下:

上述XML序列化消息的第一结构中,根节点名称为“config”,根节点中包括名称为“name”和“address”节点元素,该第一结构中还包括一个嵌套子结构,子结构中的子根节点的名称为“childs”,子根节点中包括名称为“childName”的节点属性和名称为“childAddress”的节点元素。

当第二格式为PB格式时,具有第二结构的第二序列化消息(PB序列化消息)的一个例子如下:

上述PB序列化消息的第二结构中,包括序号为1、数据类型为字符串(string)的数据项和序号为2、数据类型为字符串的数据项。上述第二结构中还包括一个序号为3的嵌套子结构,该子结构中包括序号为1、数据类型为字符串的数据项和序号为2、数据类型为字符串的数据项。

则按照XML序列化消息的第一结构以及该第一结构与PB序列化消息的第二结构之间的对应关系,利用设置的序列化描述项生成序列化数据结构,可以表示如下:

上述序列化数据结构中包括一个数据结构描述项,该数据结构描述项中包括结构名称、字段描述项和子数据结构描述项。结构名称为上述第一结构中根节点名称“config”。

字段描述项包括数据类型(type)、序号、节点类型和名称,其中节点类型为默认的节点类型(如节点元素)时可以省略。字段描述项中的序号对应于PB格式中的序号,字段描述项中的序号为该字段描述项中的数据在具有第二结构的PB序列化消息中的序号,如字段描述项中包括“序号=1”时,表示该字段描述项中的数据对应于PB格式中序号为1的数据项;节点类型字段描述项中的节点类型包括节点元素和节点属性,默认的节点类型为节点元素,可省略不写;字段描述项中的名称对应于XML格式中节点元素或节点属性的名称。

子数据结构描述项包括序号、子结构名称和子字段描述项。上述示例中利用子数据结构描述项中的序号(序号=3)建立该子数据结构描述项与同一序列化数据结构中字段描述项之间的关系,上述示例的数据结构中排序第一位的是序号为1的字段描述项,排序第二位的是序号为2的字段描述项的,则可以获知序号为3的子数据结构描述项与前两个字段描述项的关系为位于前两个字段描述项的排序之后。子数据结构描述项中的子结构名称对应于XML格式中子根节点的名称。子字段描述项中包括数据类型、序号、节点类型和名称,子字段描述项中各项信息的作用与字段描述项中各项信息的作用相同。

由上可知,通过数据结构描述项中的结构名称、子数据结构描述项中的子结构名称以及字段描述项和子字段描述项中的序号、名称建立了XML序列化消息的第一结构与PB序列化消息的第二结构之间的对应关系;对于不存在嵌套结构的场景,通过数据结构描述项中的结构名称和字段描述项中的序号、名称建立XML序列化消息的第一结构与PB序列化消息的第二结构之间的对应关系;即通过数据结构描述项中的信息和字段描述项中的信息将对应关系设置在序列化数据结构中。一种变形方式中,也可以仅通过字段描述项中的信息将对应关系设置在序列化数据结构中。

上述数据结构描述项、子数据结构描述项、字段描述项和子字段描述项中的信息根据序列化消息的格式和结构不同而发生变化,在此不进行严格限定。

通过上述操作,序列化数据结构创建完成后,进入步骤S101。

S101:对符合第一结构的第一格式的待转换序列化消息,根据序列化数据结构对该待转换序列化消息进行解析,将解析出的数据写入该序列化数据结构中,得到数据写入后的序列化数据结构。

例如,在写入数据时,可以在字段描述项或子字段描述项中增加一个数值(value),将解析出的数据写入value中。

S102:提取该数据写入后的序列化数据结构中的数据。

S103:按照序列化数据结构中记录的对应关系,将提取出的数据转换为具有第二结构的第二格式的序列化消息。

本发明又一个实施例以第一格式为XML格式、第二格式为PB格式的场景为例,对上述步骤S101中的操作进行说明,其中XML格式的序列化消息具有第一结构,PB格式的序列化消息具有第二结构;对序列化消息之间的转换方法的其他内容参见本发明的其他实施例。

在通过上述步骤S100获取到序列化数据结构后,符合第一结构的所有XML序列化消息都可以作为待转换序列化消息采用该序列化数据结构进行解析,解析过程参见图2,示出了按照序列化数据结构对XML序列化消息进行解析的过程,包括如下步骤:

S200:服务器(或其他设备)加载待转换的XML序列化消息。

S201:服务器根据该待转换的XML序列化消息校正根节点。

服务器采用流式解析法,根据序列化数据结构对待转换的XML序列化消息中的XML元素进行读取,对读取出的待转换的XML序列化消息中的XML元素逐一进行处理。当读取出的XML元素中的名称与数据结构描述项中的结构名称相同时,确定该XML元素对应的XML节点为根节点。

通过校正根节点使XML的节点和序列化数据结构中对应的字段描述项能够一致。

S202:服务器解析当前节点中的节点属性,将作为节点属性的XML元素的数据写入序列化数据结构中对应的字段描述项中,进入步骤S203。

当前节点为当前正在处理的从属或间接从属于根节点的XML节点,当前节点中的XML元素从属或间接从属于根节点。对当前节点中的XML元素的数据逐一解析,将解析出来的数据写入序列化数据结构。当该XML元素中的名称与字段描述项中的名称相同且该XML元素的类型与字段描述项中的节点类型相同时,将解析出的该XML元素的数据写入在该字段描述项中。

XML元素的类型包括节点属性和节点元素,本实施例在执行解析时,先执行对当前处理的当前节点中的节点属性的解析,再执行对节点元素的解析,然而,本实施例并不对节点属性和节点元素的解析顺序进行严格限定。

例如,对序列化数据结构中记录的如下字段描述项:

字段{序号=1,名称=“childName”,节点类型=“属性”,type=String}将解析出的节点属性的数据写入该字段描述项后,具体如下:

字段{序号=1,名称=“childName”,节点类型=“属性”,type=String,value=“XXX”}

其中,上述value中写入的XXX表示解析出的作为节点属性的XML元素的数据。

S203:服务器解析当前节点中的节点元素,进入步骤S204。

读取出当前处理XML节点中的XML元素的名称和XML元素的数据。

S204:服务器判断是否存在嵌套结构,若是,返回步骤S201,若否,进入步骤S205。

根据该XML元素的名称判断是否存在嵌套结构,当读取出的XML元素的名称与子数据结构描述项中的子结构名称相同时,确认存在嵌套结构。

其中,对于上述存在嵌套结构的场景,返回步骤S201后,将当前处理的XML元素作为子根节点(用该子根节点替换根节点),读取子根节点中各XML元素,当子根节点中的XML元素的名称与子字段描述项(用子字段描述项替换字段描述项)中的名称相同且该XML元素的类型与子字段描述项中的节点类型相同时,将解析出的该XML元素的数据写入在该子字段描述项中。

S205:服务器将作为节点元素的XML元素的数据写入对应的字段描述符中,进入步骤S206。

读取出的XML元素的名称与字段描述符中的名称相同,并且该字段描述符中的节点类型为节点元素时,确认该XML元素对应一个节点元素,读取出该XML元素的数据写入对应的字段描述符中。

S206:判断读取出的待转换的XML序列化消息中的XML元素的数据是否都已经写入至相应的字段描述项或子字段描述项,若是,进入步骤S207,若否,返回步骤S201,重复执行上述步骤S201至S206,将未写入的XML元素写入字段描述项或子字段描述项中,直至判断出XML序列化消息中的所有数据都写入序列化结构中,进入步骤S207。

S207:由写入XML元素的数据后的字段描述项或子字段描述项得到数据写入后的序列化数据结构,结束操作。

本发明又一个实施例以第一格式为XML格式、第二格式为PB格式的场景为例,主要对从数据写入后的序列化结构中提取出数据并转换为具有第二结构的PB序列化消息的操作进行说明。对序列化消息之间的转换方法的其他内容参见本发明的其他实施例。

在将XML序列化消息中存储的数据写入序列化数据结构中后,需要将数据结构中的数据以PB格式输出,最终完成从XML格式的序列化消息到PB格式的序列化消息的转换,在执行转换时遵循PB的协议规范。参见图3,示出了本实施例提供的从数据写入后的序列化数据结构中输出PB序列化消息的流程图,具体包括如下步骤:

S300:服务器(或其他设备)启动PB序列化消息的输出,进入步骤S301。

服务器进入PB格式的输出模式,在该输出模式下,服务器输出PB序列化消息。服务器加载数据写入后的序列化数据结构以执行格式转换。

S301:服务器从数据写入后的序列化数据结构中提取出字段描述项中的数据和子数据结构描述项(如果存在时)中的数据,进入步骤S302。

S302:服务器根据提取出的数据的不同类型执行不同操作。

当提取出的数据为数值类型的数据时,进入步骤S303;

当提取出的数据为字符串类型的数据时,进入步骤S304;

当提取出的数据为子数据结构描述项时,进入步骤S305。

S303:当提取出的数据为数值类型的数据时,采用下述第一方式进行处理:以变量(Varint)方式先将字段描述项中记录的该数据的序号与数据类型写入PB序列化消息中相同序号对应的数据项中,再将数值类型的数据写入该数据项中。

S304:当提取出的数据为字符串类型的数据时,采用下述第二方式进行处理:以Varint方式先将字段描述项中记录的该数据的序号与数据类型写入PB序列化消息中相同序号对应的数据项中,再将字段描述项中记录的该数据的字符串长度写入该数据项中,然后将字符串类型的数据写入该数据项中。

S305:当提取出的数据为子数据结构描述项时,以Varint方式先将该子数据结构描述项中的序号和结构类型(该结构类型指示子数据结构)写入PB序列化消息中相同序号对应的数据项中,再将该子数据结构描述项中数据长度写入该数据项中,然后返回步骤S301,采用与步骤S301至S304中相同的方法对子数据结构描述项中的数据进行处理,区别点主要在于将步骤S301至S304中的字段描述项替换为子字段描述项,即当提取出的内容为数值类型的数据时,按照上述第一方式,以Varint方式先将子字段描述项中记录的该数据的序号与数据类型写入PB序列化消息中相同序号对应的数据项中,再将数值类型的数据写入该数据项中;当提取出的数据为字符串类型的数据时,按照上述第二方式,以Varint方式先将子字段描述项中记录的该数据的序号与数据类型写入PB序列化消息中相同序号对应的数据项中,再将子字段描述项中记录的该数据的字符串长度写入该数据项中,然后将字符串类型的数据写入该数据项中。

S306:判断提取出的数据是否都已经写入PB序列化消息中对应的数据项中,若是,进入步骤S307,若否,返回步骤S302,重复执行上述步骤S302至S306,根据未写入的数据的数据类型,采用第一方式或第二方式,将未写入的数据写入对应的数据项中,直至对序列化数据结构中的所有数据处理完毕,

S307:由写入数据后的各数据项得到具有第二结构的PB序列化消息。

至此,完成从XML序列化消息到PB序列化消息的转换,结束操作。

本发明又一个实施例以第一格式为PB格式、第二格式为XML格式的场景为例,主要对解析第一结构的PB格式的序列化消息中的数据,将解析出的数据写入序列化数据结构的操作进行说明。序列化消息之间的转换方法的其他内容参见本发明的其他实施例。

在获取到序列化数据结构后,符合第一结构的所有PB序列化消息都可以采用该序列化数据结构进行解析,解析过程参见图4,示出了按照序列化数据结构对PB序列化消息进行解析的过程,包括如下步骤:

S400:服务器加载PB待转换序列化消息的二进制数据流。

S401:服务器逐个读取PB待转换序列化消息的二进制数据流中的变量(Varint)值。

S402:服务器根据提取出的Varint值的不同类型执行不同操作。

服务器首先会按照序列化数据结构中记录的对应关系,判断提取出的数据的数据类型,例如,服务器根据字段描述项中的数据类型即可获知该字段描述项中写入的数据的数据类型。具体操作时,服务器从读取到的变量值中获取该变量值对应的数据类型和序号。根据Varint编码标准,Varint值的二进制数据后3比特位放置数据类型,剩余的比特位放置序号。

当读取出的Varint值为数值类型时,进入步骤S403;

当读取出的Varint值为字符串类型时,进入步骤S404;

当读取出的Varint值为子数据结构描述项时,进入步骤S405。

在此,当读取出的Varint值的序号与子数据结构描述项的序号相同时,判定读取出的Varint值为子数据结构描述项。

S403:当读取出的Varint值为数值类型时,采用下述第三方式进行处理:继续读取下一个Varint值(该下一个Varint值为数值类型的数据),将该下一个Varint值写入序列化数据结构中序号与该Varint值的序号相同的字段描述项中。由于序列化数据结构中记录了PB格式中数据项的序号和数据类型,并且序列化数据结构中各数据项的排序也与待转换的PB序列化消息中各数据项的排序相同,从而根据序列化结构能够将PB序列化消息中的各数据项快速读取出来,根据数据类型和序号将读取出的的数据写入序列化数据结构中。

S404:当读取出的Varint值为字符串类型时,采用下述第四方式进行处理:继续读取下一个Varint值,得到字符串长度,然后再读取字符串长度大小的字节,对读取到的字节进行UTF8(8-bit Unicode Transformation Format)编码,得到字符串,将该字符串写入序列化数据结构中序号与该字符串的序号相同的字段描述项中。

S405:当读取出的Varint值的序号与子数据结构描述项的序号相同时,继续读取下一个Varint值,得到数据长度,然后再读取数据长度大小的字节得到字节码集合,返回步骤S401。采用与步骤S401至S404中相同的方法对子数据结构描述项中的数据进行处理,区别点主要在于将步骤S401至S404中的字段描述项替换为子字段描述项,即当从该字节码集合中读取出的Varint值为数值类型时,采用上述第三方式进行处理,采用下述第三方式进行处理:继续读取下一个Varint值,将该下一个Varint值写入序列化数据结构中序号与该Varint值的序号相同的子字段描述项中。当从该字节码集合中读取出的Varint值为字符串类型时,采用上述第四方式进行处理:继续读取下一个Varint值,得到字符串长度,然后再读取字符串长度大小的字节,对读取到的字节进行UTF8编码,得到字符串,将该字符串写入序列化数据结构中序号与该字符串的序号相同的子字段描述项中。

S406:判断PB待转换序列化消息中的所有Varint值是否都已经写入字段描述项或子字段描述项中,若是,进入步骤S407,若否,返回步骤S402,重复执行上述步骤S402至S406,根据未写入的Varint值的数据类型,采用第三方式或第四方式将未写入的变量值写入字段描述项或子字段描述项中,直至PB序列化消息中的所有数据都写入序列化结构中,进入步骤S407。

S407:由写入Varint值后的字段描述项或子字段描述项得到数据写入后的序列化数据结构。结束操作。

本发明又一个实施例以第一格式为PB格式、第二格式为XML格式的场景为例,对按照序列化数据结构中的对应关系,将提取出的数据转换为第二结构的XML序列化消息的操作进行说明。序列化消息之间的转换方法的其他内容参见本发明的其他实施例。

在将PB序列化消息中存储的数据写入序列化数据结构中后,需要将数据结构中的数据以XML格式输出,最终完成从PB格式到XML格式的转换,参见图5,示出了本实施例提供的从数据写入后的序列化数据结构中输出XML序列化消息的流程图,具体包括如下步骤:

S500:服务器(或其他设备)启动XML序列化消息的输出,进入步骤S501。

服务器进入XML格式的输出模式,在该输出模式下,服务器输出XML序列化消息。服务器加载数据写入后的序列化数据结构以执行格式转换。

S501:服务器创建XML根节点,进入步骤S502。

服务器首先会按照序列化数据结构中记录的对应关系,判断提取出的数据是否为结构名称以及判断提取出的数据的节点类型。当提取出的数据中的名称与序列化数据结构记录的结构名称相同时,以该数据和结构名称,创建XML序列化消息中的根节点。

S502:服务器从数据写入后的序列化数据结构中提取出字段描述项中的数据和子数据结构描述项(如果存在时),进入步骤S503。

S503:服务器创建XML节点属性,将数据写入该XML节点属性中,进入步骤S504。

通过提取出的数据所属的字段描述项或子字段描述项中记录的节点类型可以获知该数据对应于节点元素还是节点属性。

当提取出的数据为节点属性时,采用下述第六方式进行处理:在当前节点(当前处理的直接或间接从属于根节点的节点)下以节点属性的字段描述项中的名称创建XML节点属性,并将字段描述项中的数据写入该XML节点属性中。

本实施例在执行转换时,先创建XML序列化消息中的节点属性,再创建节点元素,然而,本实施例并不对节点属性和节点元素的创建顺序进行严格限定。

S504:服务器创建XML节点元素。

当提取出的数据为节点元素时,对不具有嵌套结构的场景,采用下述第五方式进行处理:在根节点下以节点元素的字段描述项中的名称创建XML节点,并将字段描述项或子字段描述项中的数据写入该XML节点中。

对具有嵌套结构的场景,在本步骤中在根节点下以节点元素的字段描述项中的名称创建XML节点元素后,进入步骤S505。

S505:服务器判断节点是否为嵌套结构,若是,返回步骤S502,若否,进入步骤S506。当提取出的数据中包括子结构名称时获知该数据对应于子数据结构描述项。

当提取出的数据为子数据结构描述项时,即节点包括嵌套结构时,以该子数据结构描述项中的名称创建子根节点,提取子数据结构描述项中的数据,采用与步骤S502至S504中相同的方法对子数据结构描述项中的数据进行处理,区别点主要在于将步骤S501至S504中的字段描述项替换为子字段描述项,即当提取出的数据为节点元素时,在子根节点下以节点元素的子字段描述项中的名称创建XML节点,并将子字段描述项中的数据写入该XML节点中。当提取出的数据为节点属性时,在当前节点下以节点属性的子字段描述项中的名称创建XML节点属性,并将子字段描述项中的数据写入该XML节点属性中。

S506:服务器将字段描述项(或子字段描述项)中的数据写入该XML节点中。

S507:判断提取出的数据是否都已经写入至相应的XML节点元素或XML节点属性中,若是,进入步骤S508,若否,返回步骤S502,重复执行上述步骤S502至S507,根据未写入的数据的节点类型,采用上述第五方式或第六方式将未写入的数据写入相应的XML节点元素或XML节点属性中,直至对数据写入后的序列化数据结构中的所有数据处理完毕,进入步骤S508。

S508:由数据写入后的XML节点元素或XML节点属性得到具有第二结构的XML序列化消息,结束操作。

本发明又一个实施例提供了一种序列化消息之间的转换装置600。参见图6,该装置600包括数据结构生成单元601、解析写入单元602、数据提取单元603和转换单元604。数据结构生成单元601包括对应关系设置单元6011和子结构设置单元6012。

数据结构生成单元601用于按照第一序列化消息的第一结构以及第一结构与第二序列化消息的第二结构之间的对应关系,利用设置的序列化描述项生成序列化数据结构;其中,第一序列化消息具有第一格式,第二序列化消息具有第二格式;序列化描述项包括数据结构描述项和设置在数据结构描述项之中的字段描述项,各数据结构描述项的结构及数据结构描述项之中各字段描述项的结构与第一结构相一致。具体的,数据结构生成单元601包括对应关系设置单元6011,用于按照第一序列化消息的第一结构以及第一结构与第二序列化消息的第二结构之间的对应关系,利用序列化描述项的数据结构描述项中的信息和字段描述项中的信息将对应关系设置在生成的序列化数据结构中。第一格式为XML格式,第二格式为PB格式时,或者,第一格式为PB格式,第二格式为XML格式时,对应关系设置单元6011,用于在数据结构描述项中设置结构名称和字段描述项,该结构名称为具有第一结构的XML序列化消息中根节点的名称,该字段描述项中包括数据类型、序号、节点类型和名称,序号为字段描述项中的数据在具有第二结构的PB序列化消息中的序号;通过数据结构描述项中的结构名称、字段描述项中的序号和名称将对应关系设置在生成的序列化数据结构中。

数据结构生成单元601还包括子结构设置单元6012,用于在数据结构描述项中设置子数据结构描述项,其中,子数据结构描述项中设置有子字段描述项,对应关系包括位于同一数据结构描述项中的子数据结构描述项与字段描述项的关系。则对应关系设置单元6011,用于在数据结构描述项中设置结构名称、字段描述项和子数据结构描述项,结构名称为具有第一结构的XML序列化消息中根节点的名称,子数据结构描述项中包括序号、子结构名称和子字段描述项,字段描述项或子字段描述项中包括数据类型、序号、节点类型和名称,序号为字段描述项或子字段描述项中的数据在具有第二结构的PB序列化消息中的序号;通过数据结构描述项中的结构名称、子数据结构描述项中的子结构名称、字段描述项和子字段描述项中的序号和名称将对应关系设置在生成的序列化数据结构中。

当第一格式为XML格式,第二格式为PB格式时,解析写入单元602用于根据序列化数据结构对待转换的XML序列化消息中的XML元素进行读取,当读取出的XML元素中的名称与数据结构描述项中的结构名称相同时,确定XML元素对应的XML节点为根节点;读取从属或间接从属于根节点的各XML元素,当XML元素中的名称与字段描述项中的名称相同且XML元素的类型与字段描述项中的节点类型相同时,将解析出的XML元素的数据写入在字段描述项中;当XML元素中的名称与子数据结构描述项中的子结构名称相同时,将XML元素作为子根节点,读取从属或间接从属于子根节点的各XML元素,当从属或间接从属于子根节点的XML元素的名称与子字段描述项中的名称相同且XML元素的类型与子字段描述项中的节点类型相同时,将解析出的XML元素的数据写入在子字段描述项中;判断读取出的待转换的XML序列化消息中的XML元素的数据是否都已经写入至相应的字段描述项或子字段描述项,若是,由写入XML元素的数据后的字段描述项或子字段描述项得到数据写入后的序列化数据结构,若否,将未写入的XML元素写入字段描述项或子字段描述项中,该字段描述项或子字段描述项的名称与节点类型与未写入的XML元素的名称和类型相同。

转换单元604,用于按照序列化数据结构中记录的对应关系,判断提取出的数据的数据类型;当提取出的数据为数值类型的数据时,采用下述第一方式进行处理:以变量方式先将字段描述项或子字段描述项中记录的数据的序号与数据类型写入PB序列化消息中相同序号对应的数据项中,再将数值类型的数据写入数据项中;当提取出的数据为字符串类型的数据时,采用下述第二方式进行处理:以变量方式先将字段描述项或子字段描述项中记录的数据的序号与数据类型写入PB序列化消息中相同序号对应的数据项中,再将字段描述项或子字段描述项中记录的数据的字符串长度写入数据项中,然后将字符串类型的数据写入数据项中;当提取出的数据为子数据结构描述项时,以变量方式先将子数据结构描述项中的序号和结构类型写入PB序列化消息中相同序号对应的数据项中,再将子数据结构描述项中数据长度写入数据项中,然后提取子数据结构描述项的子字段描述项中的数据,当提取出的数据为数值类型的数据时,采用第一方式进行处理,当提取出的数据为字符串类型的数据时,采用第二方式进行处理;判断提取出的数据是否都已经写入PB序列化消息中对应的数据项中,若是,由写入数据后的各数据项得到具有第二结构的第二格式的序列化消息,若否,根据未写入的数据的数据类型,采用第一方式或第二方式,将未写入的数据写入对应的数据项中。

当第一格式为PB格式,第二格式为XML格式时,解析写入单元602,用于逐个读取PB待转换序列化消息的二进制数据流中的变量值;从读取到的变量值中获取变量值对应的数据类型和序号;当读取出的变量值为数值类型时,采用下述第三方式进行处理:继续读取下一个变量值,将下一个变量值写入序列化数据结构中序号与变量值的序号相同的字段描述项或子字段描述项中,当读取出的变量值为字符串类型时,采用下述第四方式进行处理:继续读取下一个变量值,得到字符串长度,然后再读取字符串长度大小的字节,得到字符串,将字符串写入序列化数据结构中序号与字符串的序号相同的字段描述项或子字段描述项中;当读取出的变量值的序号与子数据结构描述项的序号相同时,继续读取下一个变量值,得到数据长度,然后再读取数据长度大小的字节得到字节码集合,以及,读取字节码集合中的变量值,当读取出的变量值为数值类型时,采用第三方式进行处理,当读取出的变量值为字符串类型时,采用第四方式进行处理;判断PB待转换序列化消息中的所有变量值是否都已经写入字段描述项或子字段描述项中,若是,由写入变量值后的字段描述项或子字段描述项得到数据写入后的序列化数据结构,若否,根据未写入的变量值的数据类型,采用第三方式或第四方式将未写入的变量值写入字段描述项或子字段描述项中。

转换单元604,用于按照序列化数据结构中记录的对应关系,判断提取出的数据是否为结构名称以及判断提取出的数据的节点类型;当提取出的数据包括结构名称时,以该数据和结构名称创建XML序列化消息中的根节点;当提取出的数据为节点元素时,采用下述第五方式进行处理:在根节点下以节点元素的字段描述项或子字段描述项中的名称创建XML节点元素,并将字段描述项或子字段描述项中的数据写入XML节点元素中;当提取出的数据为节点属性时,采用下述第六方式进行处理:在当前节点下以节点属性的字段描述项或子字段描述项中的名称创建XML节点属性,并将字段描述项或子字段描述项中的数据写入XML节点属性中;当提取出的数据为子数据结构描述项时,以子数据结构描述项中的名称创建子根节点,提取子数据结构描述项中的数据,当提取出的数据为节点元素时,在子根节点下采用第五方式进行处理,当提取出的数据为节点属性时,采用第六方式进行处理;判断提取出的数据是否都已经写入至相应的XML节点元素或XML节点属性中,若是,由数据写入后的XML节点元素或XML节点属性得到具有第二结构的第二格式的序列化消息,若否,根据未写入的数据的节点类型,采用上述第五方式或第六方式将未写入的数据写入相应的XML节点元素或XML节点属性中。

数据提取单元603用于提取数据写入后的序列化数据结构中的数据。

本发明装置实施例中各单元的具体工作方式可以参见本发明的方法实施例。

由上所述,本发明实施例采用由设置的序列化描述项生成序列化数据结构,将第一格式的待转换序列化消息写入该序列化数据结构,再从数据写入后的序列化数据结构中将数据提取出来转换为第二格式的序列化消息的技术手段,能通过一种序列化数据结构兼容多种格式的序列化消息,使服务器能够对不同格式的序列化消息进行方便、快速的转换,根据实际需求选取特定格式的序列化协议来传输消息,例如,在服务器外部采用XML格式传输消息,以继承XML格式在系统中应用的广泛性,在服务器内部采用PB格式传输消息,以继承PB格式的高效性,从而提高了服务器传递消息的灵活性,优化了消息传输性能。

为了便于清楚描述本发明实施例的技术方案,在发明的实施例中,采用了“第一”、“第二”等字样对功能和作用基本相同的相同项或相似项进行区分,本领域技术人员可以理解“第一”、“第二”等字样并不对数量和执行次序进行限定。

以上所述仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内所作的任何修改、等同替换、改进等,均包含在本发明的保护范围内。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1