集合类型数据的传输方法、装置和设备与流程

文档序号:24250195发布日期:2021-03-12 13:28阅读:48来源:国知局
集合类型数据的传输方法、装置和设备与流程

本公开涉及计算机技术领域,尤其涉及一种集合类型数据的传输方法、装置和设备。



背景技术:

随着计算机技术的飞速发展,数据库的应用也越来越复杂多样。能够满足不同场景下的需求是数据库总体功能的一个非常重要的指标。数据库在不同场景下需要向与数据库服务器连接的客户端或其他集群数据库中的其他节点发送数据。

对于一些数据结构简单的数据,现有的数据库均可以发送。

然而在一些场景下,需要传输复杂的数据类型,例如,集合类型数据,现有的传输方法不能传输集合类型的数据。



技术实现要素:

为了解决上述技术问题或者至少部分地解决上述技术问题,本公开提供了一种集合类型数据的传输方法、装置和设备。

第一方面,本公开提供一种集合类型数据的传输方法,包括:

获取以第一数据结构存储的原始数据,其中,所述原始数据中包括n个元素,所述n个元素对应n个第一键值对,每个第一键值对包括:键的值和数据的值,所述n为大于等于1的整数;

生成所述n个第一键值对对应的n个第二键值对,其中,每个第二键值对包括:第一键属性和第一数据属性,所述第一键属性包括:第一键的长度和所述第一键的值,所述第一数据属性包括:第一数据的长度和所述第一数据的值;

以第二数据结构存储传输数据,所述传输数据包括两部分,其中,一部分为第一集合属性,第一集合属性包括:第一集合标识和所述原始数据的元素的数量,另一部分为依次存储的所述n个第二键值对,其中,所述第一集合标识用于指示所述第一数据的值的嵌套层级;

向第二设备发送所述以第二数据结构存储的所述传输数据。

可选的,所述元素为集合,所述元素中包含m个子元素,所述m为大于等于1的整数;

所述方法还包括:

生成所述m个子元素对应m个第三键值对,其中,每个第三键值对包括:第二键属性和第二数据属性,所述第二键属性包括:第二键的长度和所述第二键的值,所述第二数据属性包括:第二数据的长度和所述第二数据的值;

相应地,所述第一数据的值包括:第二集合属性和依次存储的m个第三键值对,其中,所述第二集合属性包括:第二集合标识和所述元素的子元素的数量,所述第二集合标识用于指示所述第二数据的值的嵌套层级。

可选的,所述原始数据为集合,所述集合包括关联数组、嵌套表、可变数组;所述第一集合标识还用于指示所述原始数据的集合类型。

第二方面,本公开提供一种集合类型数据的传输方法,包括:

接收第一设备发送的以第二数据结构存储的传输数据;

根据所述以第二数据结构存储的传输数据,获取第一集合属性,所述第一集合属性包括:第一集合标识和所述传输数据对应的原始数据中包含的元素的数量n;

根据所述第一集合标识,确定所述原始数据的集合类型和嵌套层级;

根据所述以第二数据结构存储的传输数据,继续依次分别获取n个元素对应的n个第二键值对;

针对所述n个第二键值对中的每个第二键值对,获取所述第二键值对的第一键的长度;根据所述第一键的长度,获取所述第一键的值;继续获取第一数据的长度;根据所述第一数据的长度获取第一数据的值;根据第一键的值,得到第一键值对中键的值,根据所述第一数据的值,得到第一键值对中数据的值,其中,所述第一键值对包括所述键的值和所述数据的值;根据所述第一键值对得到对应的元素;

以第一数据结构存储原始数据,所述原始数据包括n个所述元素。

可选的,所述传输数据的嵌套层级指示所述传输数据对应的原始数据的元素为集合;

所述根据所述第一数据的值,得到第一键值对中数据的值,包括:

根据所述第一数据的值,获取第二集合属性,所述第二集合属性包括:第二集合标识和所述元素中包含的子元素的数量m;

根据所述第二集合标识,确定所述元素的集合类型和嵌套层级;

根据所述第一数据的值,继续依次分别获取m个子元素对应的m个第三键值对;

针对所述m个第三键值对中的每个第三键值对,获取所述第三键值对的第二键的长度;根据所述第二键的长度,获取所述第二键的值;继续获取第二数据的长度;根据所述第二数据的长度获取第二数据的值;根据第二键的值,得到子元素的键的值,根据所述第二数据的值,得到子元素的数据的值,根据所述子元素的键的值和所述子元素的数据的值,得到子元素;

所述第一键值对中数据的值为以第一数据结构存储的所述元素,所述元素包括m个所述子元素。

可选的,传输数据的嵌套层级指示所述传输数据对应的原始数据的元素为集合。s805中根据所述第一数据的值,得到第一键值对中数据的值,包括以下步骤:

根据所述第一数据的值,获取第二集合属性,所述第二集合属性包括:第二集合标识和所述元素中包含的子元素的数量m;

根据所述第二集合标识,确定所述元素的集合类型和嵌套层级;

根据所述第一数据的值,继续依次分别获取m个子元素对应的m个第三键值对。

针对所述m个第三键值对中的每个第三键值对,获取所述第三键值对的第二键的长度;根据所述第二键的长度,获取所述第二键的值;继续获取第二数据的长度;根据所述第二数据的长度获取第二数据的值;根据第二键的值,得到子元素的键的值,根据所述第二数据的值,得到子元素的数据的值,根据所述子元素的键的值和所述子元素的数据的值,得到子元素。

所述第一键值对中数据的值为以第一数据结构存储的所述元素,所述元素包括m个所述子元素。

可选的,所述原始数据为集合,所述集合包括关联数组、嵌套表、可变数组;所述第一集合标识还用于指示所述原始数据的集合类型。

第三方面,一种集合类型数据的传输装置,包括:

获取模块,用于获取以第一数据结构存储的原始数据,其中,所述原始数据中包括n个元素,所述n个元素对应n个第一键值对,每个第一键值对包括:键的值和数据的值,所述n为大于等于1的整数;

生成模块,用于生成所述n个第一键值对对应的n个第二键值对,其中,每个第二键值对包括:第一键属性和第一数据属性,所述第一键属性包括:第一键的长度和所述第一键的值,所述第一数据属性包括:第一数据的长度和所述第一数据的值;

存储模块,用于以第二数据结构存储传输数据,所述传输数据包括两部分,其中,一部分为第一集合属性,第一集合属性包括:第一集合标识和所述原始数据的元素的数量,另一部分为依次存储的所述n个第二键值对,其中,所述第一集合标识用于指示所述第一数据的值的嵌套层级;

发送模块,用于向第二设备发送所述以第二数据结构存储的所述传输数据。

可选的,所述元素为集合,所述元素中包含m个子元素,所述m为大于等于1的整数;

生成模块12还用于:生成所述m个子元素对应m个第三键值对,其中,每个第三键值对包括:第二键属性和第二数据属性,所述第二键属性包括:第二键的长度和所述第二键的值,所述第二数据属性包括:第二数据的长度和所述第二数据的值;

相应地,所述第一数据的值包括:第二集合属性和依次存储的m个第三键值对,其中,所述第二集合属性包括:第二集合标识和所述元素的子元素的数量,所述第二集合标识用于指示所述第二数据的值的嵌套层级。

可选的,所述原始数据为集合,所述集合包括关联数组、嵌套表、可变数组;所述第一集合标识还用于指示所述原始数据的集合类型。

可选的,所述原始数据为集合,所述集合包括关联数组、嵌套表、可变数组;所述第一集合标识还用于指示所述原始数据的集合类型。

第四方面,本公开提供一种集合类型数据的传输装置,包括:

接收模块,用于接收第一设备发送的以第二数据结构存储的传输数据;

获取模块,用于根据所述以第二数据结构存储的传输数据,获取第一集合属性,所述第一集合属性包括:第一集合标识和所述传输数据对应的原始数据中包含的元素的数量n;

确定模块,用于根据所述第一集合标识,确定所述原始数据的集合类型和嵌套层级;

获取模块还用于:根据所述以第二数据结构存储的传输数据,继续依次分别获取n个元素对应的n个第二键值对;

得到模块,用于针对所述n个第二键值对中的每个第二键值对,获取所述第二键值对的第一键的长度;根据所述第一键的长度,获取所述第一键的值;继续获取第一数据的长度;根据所述第一数据的长度获取第一数据的值;根据第一键的值,得到第一键值对中键的值,根据所述第一数据的值,得到第一键值对中数据的值,其中,所述第一键值对包括所述键的值和所述数据的值;根据所述第一键值对得到对应的元素;

存储模块,用于以第一数据结构存储原始数据,所述原始数据包括n个所述元素。

可选的,所述传输数据的嵌套层级指示所述传输数据对应的原始数据的元素为集合;

所述根据所述第一数据的值,得到第一键值对中数据的值,包括:

根据所述第一数据的值,获取第二集合属性,所述第二集合属性包括:第二集合标识和所述元素中包含的子元素的数量m;

根据所述第二集合标识,确定所述元素的集合类型和嵌套层级;

根据所述第一数据的值,继续依次分别获取m个子元素对应的m个第三键值对;

针对所述m个第三键值对中的每个第三键值对,获取所述第三键值对的第二键的长度;根据所述第二键的长度,获取所述第二键的值;继续获取第二数据的长度;根据所述第二数据的长度获取第二数据的值;根据第二键的值,得到子元素的键的值,根据所述第二数据的值,得到子元素的数据的值,根据所述子元素的键的值和所述子元素的数据的值,得到子元素;

所述第一键值对中数据的值为以第一数据结构存储的所述元素,所述元素包括m个所述子元素。

可选的,所述原始数据为集合,所述集合包括关联数组、嵌套表、可变数组;所述第一集合标识还用于指示所述原始数据的集合类型。

第五方面,本公开提供一种集合类型数据的传输设备,包括:

存储器,用于存储处理器可执行指令的存储器;

处理器,用于在计算机程序被执行时,实现如上述第一方面所述的方法。

第六方面,本公开提供一种集合类型数据的传输设备,包括:

存储器,用于存储处理器可执行指令的存储器;

处理器,用于在计算机程序被执行时,实现如上述第二方面所述的方法。

第七方面,本公开提供一种计算机可读存储介质,其特征在于,所述计算机可读存储介质中存储有计算机执行指令,所述计算机执行指令被处理器执行时用于实现如上述第一方面所述的集合类型数据的传输方法。

第八方面,本公开提供一种计算机可读存储介质,其特征在于,所述计算机可读存储介质中存储有计算机执行指令,所述计算机执行指令被处理器执行时用于实现如上述第二方面所述的集合类型数据的传输方法。

本公开实施例提供的技术方案与现有技术相比具有如下优点:

通过获取以第一数据结构存储的原始数据,其中,原始数据包括n个元素,n个元素对应n个第一键值对,每个第一键值对包括:第一键的值和第一数据的值,n为大于等于1的整数,则原始数据为集合,第一数据结构不利于传输,则需要对原始数据转换成可以传输的第二数据结构,生成n个第一键值对对应的n个第二键值对,其中,每个第二键值对包括:第一键属性和第一数据属性,第一键属性包括:第一键的长度和第一键的值,第一数据属性包括:第一数据的长度和第一数据的值,以第二数据结构存储传输数据,传输数据包括两部分,其中,一部分为第一集合属性,第一集合属性包括:第一集合标识和原始数据的元素的数量,另一部分为依次存储的n个第二键值对,其中,第一集合标识用于指示第一数据的值的嵌套层级,从而将复杂的集合类型的原始数据转换成可以进行传输的第二数据结构的传输数据,然后向第二设备发送以第二数据结构存储的传输数据,从而完成了集合类型的数据的传输。

附图说明

此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本公开的实施例,并与说明书一起用于解释本公开的原理。

为了更清楚地说明本公开实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,对于本领域普通技术人员而言,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。

图1为本公开提供的一种数据库系统的架构示意图;

图2为本公开实施例提供的一种集合类型数据的传输方法的流程示意图;

图3为本公开提供的一种原始数据的结构示意图;

图4a为本公开提供的一种第二键值对的结构示意图;

图4b为本公开提供的一种第二数据结构的示意图;

图5为本公开提供的另一种原始数据的结构示意图;

图6为本公开实施例提供的另一种集合类型数据的传输方法的流程示意图;

图7为本公开提供的另一种第二数据结构的示意图;

图8为本公开实施例提供的再一种集合类型数据的传输方法的流程示意图;

图9为本公开实施例提供的一种集合类型数据的传输方法的交互示意图;

图10为本公开实施例提供的一种集合类型数据的传输装置的结构示意图;

图11为本公开实施例提供的另一种集合类型数据的传输装置的结构示意图;

图12为本公开实施例提供的一种集合类型数据的传输设备的结构示意图;

图13为本公开实施例提供的另一种集合类型数据的传输设备的结构示意图。

具体实施方式

为了能够更清楚地理解本公开的上述目的、特征和优点,下面将对本公开的方案进行进一步描述。需要说明的是,在不冲突的情况下,本公开的实施例及实施例中的特征可以相互组合。

在下面的描述中阐述了很多具体细节以便于充分理解本公开,但本公开还可以采用其他不同于在此描述的方式来实施;显然,说明书中的实施例只是本公开的一部分实施例,而不是全部的实施例。

首先对本发明所涉及的名词进行解释:

集合,是指包含一个或多个内部组件(也叫做元素)的一种数据结构,其中,每个元素的数据结构为键值对(key-value),键值对包括键的值(key)和数据的值(value),其中,每个键都是一个唯一的索引,可以确定唯一的数据的值,通过键即可访问对应的数据。数据的值的数据类型可以是普通类型或者集合类型,其中,普通类型可以为整数类型,或者字符类型或者其他用户定义的类型。

集合类型数据包括关联数组、嵌套表和可变数组。

关联数组(也叫做索引表),是指一组数据结构为键值对的元素的集合,其中,键的数据类型可以是整数类型或者字符类型。

嵌套表,是指一组元素数量不定,且元素之间没有特定顺序的集合,其中,键的数据类型为数字类型,键的值是从1开始的有序序列(可以不连续),且没有固定上限。

可变数组,是指一组包含相同元素类型的数据的集合,其中,元素的数量可以为0,如果元素的数量大于0,key为从1开始的连续序列。

图1为本公开提供的一种数据库系统的架构示意图,下面结合图1所示的系统架构说明本公开的具体的应用场景。如图1所示,数据库系统包括:第一设备101和第二设备102,第一设备101与第二设备102连接,第一设备101为数据库的服务器,其中数据库可以包含一个服务器或多个服务器,第二设备102可以为该数据库中的其他服务器,也可以为其他数据库的服务器,还可以为客户端,对此本公开不做限定。

可选的,第一设备101和第二设备102可以以开放数据库连接(opendatabaseconnectivity,简称odbc)接口或者java数据库连接(javadatabaseconnectivity,简称jdbc)接口等连接。

数据库系统中第一设备101需要向第二设备102发送数据库中的数据,涉及到数据库中的数据的传输,数据库中的数据的传输需要将数据库中的数据转换成可以传输的序列化的结构,对于一些数据结构简单的数据,现有的数据库均可以进行传输,然而在一些场景下,需要传输数据结构复杂的数据,例如,集合类型数据,现有的传输方法不能传输集合类型的数据。

针对上述技术问题,本公开提供一种集合类型数据的传输方法、装置和设备,第一设备通过对集合数据类型的数据进行序列化,得到可以传输的数据结构的数据,从而准确向第二设备发送集合数据类型的数据,从而实现了传输集合类型的数据。

相应的,第二设备接收到可以传输的数据结构的数据以后,对其进行解析,得到准确的集合数据类型的数据。

下面以具体的实施例说明本公开的技术方案和本公开的技术方案如何解决上述技术问题。

图2为本公开实施例提供的一种集合类型数据的传输方法的流程示意图,如图2所示,本实施例的方法由图1所示的第一设备执行,本实施例的方法如下:

s201、获取以第一数据结构存储的原始数据。

其中,原始数据中包括n个元素,n个元素对应n个第一键值对,每个第一键值对包括:键的值和数据的值,n为大于等于1的整数。

第一数据结构为集合类型数据结构,第一数据结构包括关联数组、嵌套表或者可变数组,在需要向第二设备发送原始数据时,获取以第一数据结构存储的原始数据。

图3为本公开提供的一种原始数据的结构示意图,如图3所示,原始数据300包括n个元素,其中每个元素为一个第一键值对,例如,第一键值对301包括键的值1和数据的值1。

可选的,原始数据存储在第一设备的内存中,可以从内存中获取原始数据。

s202、生成n个第一键值对对应的n个第二键值对。

其中,每个第二键值对包括:第一键属性和第一数据属性,第一键属性包括:第一键的长度和第一键的值,第一数据属性包括:第一数据的长度和第一数据的值。

针对n个第一键值对中的每个第一键值对,根据第一键值对中包含的键的值,确定键的值的长度为第一键的长度,确定该键的值为第一键的值,从而得到按照第一键的长度、第一键的值的顺序存储的第一键属性。

针对n个第一键值对中的每个第一键值对,第一键值对中包含的数据的值可以为普通类型的数据的值,例如,数字类型或者字符类型的数据,也可以为集合类型的数据的值(即该数据的值是一个集合),若第一键值对中包含的数据的值为集合类型的数据的值,则对于原始数据来说,其包含的n个数据的值中分别嵌套了集合,嵌套的集合中包含m个子元素,m为大于等于1的整数。若原始数据为嵌套集合的形式,则其元素均为集合,值得说明的是,对于每个元素中包含的子元素的数量本公开不做限定。若原始数据不为嵌套集合的形式,则其元素均不为集合。

进一步地,若原始数据为嵌套集合的形式,原始数据中所有元素的集合类型可以相同。

若第一键值对中包含的数据的值为普通类型的数据的值,根据第一键值对中包含的数据的值,确定该数据的值的长度为第一数据的长度,该数据的值为第一数据的值,从而得到按照第一数据的长度、第一数据的值的顺序存储的第一数据属性。按照顺序存储第一键属性和第一数据属性,得到第二键值对。

若第一键值对中包含的数据的值为集合,则需要将第一键值对中包含的数据的值转化成可以传输的形式的数据,该可以传输的形式的数据的长度为第一数据的长度,该可以传输的形式的数据的值为第一数据的值。进一步地,若第一键值对中包含的数据的值为集合(原始数据中的元素为集合),则子元素的数据的值可以为普通类型的数据,也可以为集合类型的数据,以此类推,则原始数据可以嵌套一层或多层集合。

图4a为本公开提供的一种第二键值对的结构示意图,如图4a所示,第二键值对41包括第一键属性和第一数据属性,第一键属性包括依次排列的第一键的长度和第一键的值,第一数据属性包括依次排列的第一数据的长度和第一数据的值411。这样在第二设备对第二键值对进行解析时,可以通过先获取到第一键的长度或者第一数据的长度,从而根据该长度获取到对应的值,即解析时,可以先获取第一键的长度,然后根据获取到的第一键的长度,获取其后第一键的长度的数据,即为第一键的值。

s203、以第二数据结构存储传输数据。

其中,传输数据包括两部分,其中,一部分为第一集合属性,第一集合属性包括:第一集合标识和原始数据的的元素的数量,另一部分为依次存储的n个第二键值对,其中,第一集合标识用于指示第一数据的值的嵌套层级。

元素为集合,其中,集合类型包括关联数组、嵌套表或者可变数组,则传输数据中应包括元素的集合类型,第一集合标识用于指示原始数据的第一数据结构的类型,即第一集合标识可以用来标识原始数据的集合类型。第一数据的值的嵌套的层级可以用来表示第一数据的值是否嵌套集合,也可以用来表示第一数据的值中嵌套集合的总层数。

获取原始数据的元素的数量,原始数据的元素的数量即为n。

将第一集合标识和原始数据的元素的数量依次按照顺序组成第一集合属性。

获取到n个第二键值对以后,可以得到依次连续的n个第二键值对。将依次连续的n个第二键值对拼接在第一集合属性之后,得到以第二数据结构存储的传输数据。

图4b为本公开提供的一种第二数据结构的示意图,图4b是在图4a的基础上,如图4b所示,以第二数据结构存储的传输数据包括:依次存储的第一集合标识42、元素的数量43和依次存储的n个第二键值对41,图4b中示例性的示出了一个第二键值对41,其并不构成对本公开的限制。

可选的,以第二数据结构存储的传输数据可以为二进制编码序列,从而可以被传输。

s204、向第二设备发送以第二数据结构存储的传输数据。

其中,可以以不同的数据传输协议向第二设备发送以第二数据结构存储的传输数据,例如,网际互连协议(internetprotocol,简称ip),传输控制协议(transmissioncontrolprotocol,简称tcp)。

进一步地,第二设备接收到以第二数据结构存储的传输数据,对传输数据进行解析,根据第一集合标识确定当前数据的集合类型和嵌套层级,以及第一集合的元素的数量,根据第一集合的属性信息依次解析第一集合的元素的数量的第二键值对,从而可以得到以第一数据结构存储的原始数据。

本实施例,通过获取以第一数据结构存储的原始数据,其中,原始数据包括n个元素,n个元素对应n个第一键值对,每个第一键值对包括:第一键的值和第一数据的值,n为大于等于1的整数,则原始数据为集合,第一数据结构不利于传输,则需要对原始数据转换成可以传输的第二数据结构,生成n个第一键值对对应的n个第二键值对,其中,每个第二键值对包括:第一键属性和第一数据属性,第一键属性包括:第一键的长度和第一键的值,第一数据属性包括:第一数据的长度和第一数据的值,以第二数据结构存储传输数据,传输数据包括两部分,其中,一部分为第一集合属性,第一集合属性包括:第一集合标识和原始数据的元素的数量,另一部分为依次存储的n个第二键值对,其中,第一集合标识用于指示第一数据的值的嵌套层级,从而将复杂的集合类型的原始数据转换成可以进行传输的第二数据结构的传输数据,然后向第二设备发送以第二数据结构存储的传输数据,从而完成了集合类型的数据的传输。

在上述实施例的基础上,进一步地,若第一数据的值嵌套集合,即原始数据中的元素为集合,元素中包含m个子元素,m为大于等于1的整数。

图5为本公开提供的另一种原始数据的结构示意图,如图5所示,原始数据5包括n个元素,每个元素对应一个第一键值对,例如,第一个元素对应的第一键值对51包括第一键的值1和第一数据的值1,其中,第一数据的值1(511)包括一个或多个子元素,每个子元素对应一个第三键值对,对于第三键值对的数量本公开不做限定。类似地,第一数据的值2也包含一个或多个第三键值对,第一数据的值n也包含一个或多个第三键值对。

下面以具体的实施例说明若第一数据的值嵌套集合,如何对嵌套的集合进行处理,从而使得嵌套的集合可以传输。

图6为本公开实施例提供的另一种集合类型数据的传输方法的流程示意图,图6是在图2所示实施例的基础上,进一步地,元素为集合,元素中包含m个子元素,m为大于等于1的整数,如图6所示,本实施例提供的方法还包括s205:

s205、生成m个子元素对应的m个第三键值对。

其中,每个第三键值对包括:第二键属性和第二数据属性,第二键属性包括:第二键的长度和第二键的值,第二数据属性包括:第二数据的长度和第二数据的值。

针对m个子元素中的每个子元素,根据子元素中包含的子元素的键的值,确定子元素的键的值的长度为第二键的长度,确定该子元素的键的值为第二键的值,从而得到按照第二键的长度、第二键的值的顺序存储的第二键属性。

针对m个子元素中的每个子元素,子元素中包含的子元素的数据的值可以为普通类型的数据的值,例如,数字类型或者字符类型的数据,也可以为集合类型的数据的值(即该数据的值是一个集合),若子元素的数据的值为集合类型的数据的值,则对于元素来说,其包含的m个子元素中分别嵌套了集合,每个子元素为一个集合。若元素为嵌套集合的形式,则其子元素均为集合。若元素不为嵌套集合的形式,则其子元素均不为集合。

若子元素的数据的值为普通类型的数据的值,根据子元素的数据的值,确定该子元素的数据的值的长度为第二数据的长度,该子元素的数据的值为第二数据的值,从而得到按照第二数据的长度、第二数据的值的顺序存储的第二数据属性。按照顺序存储第二键属性和第二数据属性,得到第三键值对。

若子元素的数据的值为集合类型的数据的值,则需要将子元素的数据的值转化成可以传输的形式的数据,该可以传输的形式的数据的长度为第二数据的长度,该可以传输的形式的数据的值为第二数据的值。进一步地,若子元素的数据的值为集合,则子元素的数据的值中的子元素可以为普通类型的数据,也可以为集合类型的数据,以此类推,则元素可以嵌套一层或多层集合。第三键值对的结构与图4a所示的第二键值对的结构类似。

相应地,第一数据的值包括:第二集合属性和依次存储的m个第四键值对,其中,第二集合属性包括:第二集合标识和元素的子元素的数量,第二集合标识用于指示第二数据的值的嵌套层级。

针对每个第一数据的值,第一数据结构为集合类型的数据结构,其中,集合类型包括关联数组、嵌套表或者可变数组,则传输数据中应包括第一数据为哪种集合类型的信息,第二集合标识用于指示第一数据的值的第一数据结构的类型,即第二集合标识可以用来标识第一数据的值的集合类型。另外,第三键值对中包含的第二数据的值可以为普通类型的数据的值,例如,数字类型或者字符类型的数据,第二数据的值也可以为集合类型的数据(即第二数据的值是一个集合),则对于第一数据的值来说,其包含的m个子元素的值分别嵌套了集合,以此类推,原始数据可以嵌套集合。第二数据的值的嵌套的层级可以用来表示第二数据的值是否嵌套集合,也可以用来表示第二数据的值中嵌套集合的总层数。

可选的,若第二数据的值中嵌套集合,则每个第二数据的值中均嵌套集合,且嵌套的集合的类型相同,例如,嵌套的集合的类型为关联数组,则第二数据的值中嵌套的集合的类型均为关联数组。值得说明的是,对于嵌套的集合中包含的子元素的数量本公开不做限定。

获取元素中包含的子元素的数量,子元素的数量即为m。

将第二集合标识和子元素的数量依次按照顺序组成第二集合属性。

获取到m个第四键值对以后,可以得到依次存储的连续的m个第四键值对。将依次存储的m个第四键值对拼接在第二集合属性之后,得到以第二数据结构存储的第一数据的值。

图7为本公开提供的另一种第二数据结构的示意图,图7是在图4b所示第二数据结构的基础上,进一步地,若第一数据的值为集合,如图7所示,以第二数据结构存储的第一数据的值411包括:依次存储的第二集合标识4111、子元素的数量4112和依次存储的第三键值对4113,第三键值对4113的数量为一个或多个,图7中示例性的示出了一个第三键值对4113,其并不构成对本公开的限制。

若原始数据中的元素为集合,也即第一数据的值中嵌套集合,则s205在s202之前执行,从而得到以第二数据结构存储的第一数据的值,若第二数据的值嵌套集合,则可以用类似的方法,对第二数据的值进行类似s205中的步骤对子元素进行处理,得到以第二数据结构存储的第二数据的值。

本实施例,若元素为集合,则元素中包含m个子元素,m为大于等于1的整数,生成m个子元素对应m个第三键值对,其中,每个第三键值对包括:第二键属性和第二数据属性,第二键属性包括:第二键的长度和第二键的值,第二数据属性包括:第二数据的长度和第二数据的值,相应地,第一数据的值包括:第二集合属性和依次存储的m个第三键值对,其中,第二集合属性包括:第二集合标识和元素的子元素的数量,第二集合标识用于指示第二数据的值的嵌套层级。使得元素为集合的情况下,对该集合进行转换,从而得到了可以传输的以第二数据结构存储的传输数据。

图8为本公开实施例提供的再一种集合类型数据的传输方法的流程示意图,如图8所示,本实施例由图1所示的第二设备执行,本实施例提供的方法包括:

s801、接收第一设备发送的以第二数据结构存储的传输数据。

s802、根据以第二数据结构存储的传输数据,获取第一集合属性。

其中,第一集合属性包括:第一集合标识和传输数据的元素的数量n。

s803、根据第一集合标识,确定传输数据的集合类型和嵌套层级。

s804、根据以第二数据结构存储的传输数据,继续依次分别获取n个元素对应的n个第二键值对。

第二设备接收到以第二数据结构存储的传输数据,根据预先知道的以第二数据结构存储的传输数据的结构进行解析操作,从而得到原始数据,以第二数据结构存储的传输数据的结构如图4b所示。可以理解,以第二数据结构存储的传输数据为二进制编码序列。根据以第二数据结构存储的传输数据,获取第一集合属性,例如,预先规定第一集合属性使用该传输数据的前多少位表示,例如,该传输数据的前四个字节用于表示该传输数据的第一集合属性,其中,前四个字节中的前两个字节表示第一集合标识,后两个字节标识传输数据的元素的数量,则第二设备先获取传输数据的前两个字节,进行解析,得到第一集合标识,得到了传输数据的集合类型以及嵌套层级,再获取后两个字节,进行解析,得到元素的数量,根据该元素的数量继续解析后面的第二键值对。

s805、针对n个第二键值对中的每个第二键值对,获取第二键值对的第一键的长度;根据第一键的长度,获取第一键的值;继续获取第一数据的长度;根据第一数据的长度获取第一数据的值;根据第一键的值,得到第一键值对中键的值,根据第一数据的值,得到第一键值对中数据的值。

其中,第一键值对包括键的值和数据的值;根据第一键值对得到对应的元素。

针对n个第二键值对中的每个第二键值对,其存储的结构均相同,为如图4a所示的结构,根据该结构,首先获取第一键的长度,根据第一键的长度,获取第一键的值,其中,第一键的长度的序列为预设的长度存储的,例如,预设第一键的长度在传输数据中占2个字节,则首先获取第二键值对中的前2个字节,进行解析,得到第一键的长度,假设第一键的长度为1个字节,则获取第一键的长度之后的1个字节的长度的序列数据,对其进行解析,得到第一键的值。

然后继续在第一键的值之后的序列获取第一数据的长度,根据第一数据的长度获取第一数据的值。获取方式与上述获取第一键的长度和第一键的值类似。

其中,原始数据中的元素可以为普通类型的数据,也可以为集合类型的数据,则相应的转化来的第一数据的值可以为实际数值,也可以为已经由集合转换成序列的(如图7所示的第一数据的值411)。在解析第一集合标识时已经知道其第一数据的值的数据类型,因此,获取到第一数据的值的序列以后,根据其数据类型进行解析。

s806、以第一数据结构存储原始数据。

其中,原始数据包括n个元素。

本实施例中的相关名词的含义与上述实施例中的相同名称的名词的含义相同,此处不再赘述。

本实施例,接收第一设备发送的以第二数据结构存储的传输数据,根据以第二数据结构存储的传输数据,获取第一集合属性,第一集合属性包括:第一集合标识和传输数据对应的原始数据中包含的元素的数量n,根据第一集合标识,确定原始数据的集合类型和嵌套层级,根据以第二数据结构存储的传输数据,继续依次分别获取n个元素对应的n个第二键值对,针对n个第二键值对中的每个第二键值对,获取第二键值对的第一键的长度;根据第一键的长度,获取第一键的值;继续获取第一数据的长度;根据第一数据的长度获取第一数据的值;根据第一键的值,得到第一键值对中键的值,根据第一数据的值,得到第一键值对中数据的值,其中,第一键值对包括键的值和数据的值;根据第一键值对得到对应的元素,以第一数据结构存储原始数据,原始数据包括n个元素。从而能够正确解析以第二数据结构存储的传输数据,得到原始数据,实现了集合类型数据的传输。

在上述实施例的基础上,进一步地,传输数据的嵌套层级指示传输数据对应的原始数据的元素为集合。s805中根据第一数据的值,得到第一键值对中数据的值,包括以下步骤:

根据第一数据的值,获取第二集合属性,第二集合属性包括:第二集合标识和元素中包含的子元素的数量m;

根据第二集合标识,确定元素的集合类型和嵌套层级;

根据第一数据的值,继续依次分别获取m个子元素对应的m个第三键值对。

针对m个第三键值对中的每个第三键值对,获取第三键值对的第二键的长度;根据第二键的长度,获取第二键的值;继续获取第二数据的长度;根据第二数据的长度获取第二数据的值;根据第二键的值,得到子元素的键的值,根据第二数据的值,得到子元素的数据的值,根据子元素的键的值和子元素的数据的值,得到子元素。

第一键值对中数据的值为以第一数据结构存储的元素,元素包括m个子元素。

可选的,原始数据为集合,集合包括关联数组、嵌套表、可变数组;第一集合标识还用于指示原始数据的集合类型。

图9为本公开实施例提供的一种集合类型数据的传输方法的交互示意图,如图9所示,本实施例提供的方法包括:

s901、第一设备获取以第一数据结构存储的原始数据。

其中,原始数据中包括n个元素,n个元素对应n个第一键值对,每个第一键值对包括:键的值和数据的值,n为大于等于1的整数。

s902、第一设备生成n个第一键值对对应的n个第二键值对。

其中,每个第二键值对包括:第一键属性和第一数据属性,第一键属性包括:第一键的长度和第一键的值,第一数据属性包括:第一数据的长度和第一数据的值。

s903、第一设备以第二数据结构存储传输数据。

其中,传输数据包括两部分,其中,一部分为第一集合属性,第一集合属性包括:第一集合标识和原始数据的的元素的数量,另一部分为依次存储的n个第二键值对,其中,第一集合标识用于指示第一数据的值的嵌套层级。

s904、第一设备向第二设备发送以第二数据结构存储的传输数据。

s905、第二设备根据以第二数据结构存储的传输数据,获取第一集合属性,第一集合属性包括:第一集合标识和传输数据的元素的数量n。

s906、第二设备根据第一集合标识,确定传输数据的集合类型和嵌套层级。

s907、第二设备根据以第二数据结构存储的传输数据,继续依次分别获取n个元素对应的n个第二键值对。

s908、第二设备针对n个第二键值对中的每个第二键值对,获取第二键值对的第一键的长度;根据第一键的长度,获取第一键的值;继续获取第一数据的长度;根据第一数据的长度获取第一数据的值;根据第一键的值,得到第一键值对中键的值,根据第一数据的值,得到第一键值对中数据的值。

其中,第一键值对包括键的值和数据的值;根据第一键值对得到对应的元素。

s909、第二设备以第一数据结构存储原始数据。

其中,原始数据包括n个元素。

上述实施例的方法,其实现原理和技术效果与上述方法实施例的技术方案类似,此处不再赘述。

图10为本公开实施例提供的一种集合类型数据的传输装置的结构示意图,如图10所示,本实施例的装置包括:

获取模块11,用于获取以第一数据结构存储的原始数据,其中,原始数据中包括n个元素,n个元素对应n个第一键值对,每个第一键值对包括:键的值和数据的值,n为大于等于1的整数;

生成模块12,用于生成n个第一键值对对应的n个第二键值对,其中,每个第二键值对包括:第一键属性和第一数据属性,第一键属性包括:第一键的长度和第一键的值,第一数据属性包括:第一数据的长度和第一数据的值;

存储模块13,用于以第二数据结构存储传输数据,传输数据包括两部分,其中,一部分为第一集合属性,第一集合属性包括:第一集合标识和原始数据的元素的数量,另一部分为依次存储的n个第二键值对,其中,第一集合标识用于指示第一数据的值的嵌套层级;

发送模块14,用于向第二设备发送以第二数据结构存储的传输数据。

可选的,元素为集合,元素中包含m个子元素,m为大于等于1的整数;

生成模块12还用于:生成m个子元素对应m个第三键值对,其中,每个第三键值对包括:第二键属性和第二数据属性,第二键属性包括:第二键的长度和第二键的值,第二数据属性包括:第二数据的长度和第二数据的值;

相应地,第一数据的值包括:第二集合属性和依次存储的m个第三键值对,其中,第二集合属性包括:第二集合标识和元素的子元素的数量,第二集合标识用于指示第二数据的值的嵌套层级。

可选的,原始数据为集合,集合包括关联数组、嵌套表、可变数组;第一集合标识还用于指示原始数据的集合类型。

图11为本公开实施例提供的另一种集合类型数据的传输装置的结构示意图,如图11所示,本实施例的装置包括:

接收模块21,用于接收第一设备发送的以第二数据结构存储的传输数据;

获取模块22,用于根据以第二数据结构存储的传输数据,获取第一集合属性,第一集合属性包括:第一集合标识和传输数据对应的原始数据中包含的元素的数量n;

确定模块23,用于根据第一集合标识,确定原始数据的集合类型和嵌套层级;

获取模块22还用于:根据以第二数据结构存储的传输数据,继续依次分别获取n个元素对应的n个第二键值对;

得到模块24,用于针对n个第二键值对中的每个第二键值对,获取第二键值对的第一键的长度;根据第一键的长度,获取第一键的值;继续获取第一数据的长度;根据第一数据的长度获取第一数据的值;根据第一键的值,得到第一键值对中键的值,根据第一数据的值,得到第一键值对中数据的值,其中,第一键值对包括键的值和数据的值;根据第一键值对得到对应的元素;

存储模块25,用于以第一数据结构存储原始数据,原始数据包括n个元素。

可选的,传输数据的嵌套层级指示传输数据对应的原始数据的元素为集合;

根据第一数据的值,得到第一键值对中数据的值,包括:

根据第一数据的值,获取第二集合属性,第二集合属性包括:第二集合标识和元素中包含的子元素的数量m;

根据第二集合标识,确定元素的集合类型和嵌套层级;

根据第一数据的值,继续依次分别获取m个子元素对应的m个第三键值对;

针对m个第三键值对中的每个第三键值对,获取第三键值对的第二键的长度;根据第二键的长度,获取第二键的值;继续获取第二数据的长度;根据第二数据的长度获取第二数据的值;根据第二键的值,得到子元素的键的值,根据第二数据的值,得到子元素的数据的值,根据子元素的键的值和子元素的数据的值,得到子元素;

第一键值对中数据的值为以第一数据结构存储的元素,元素包括m个子元素。

可选的,原始数据为集合,集合包括关联数组、嵌套表、可变数组;第一集合标识还用于指示原始数据的集合类型。

上述实施例的装置,可以用于执行上述方法实施例的技术方案,其实现原理和技术效果类似,此处不再赘述。

图12为本公开实施例提供的一种集合类型数据的传输设备的结构示意图,如图12所示,本实施例的设备包括:

存储器31,用于存储处理器可执行指令的存储器;

处理器32,用于在计算机程序被执行时,实现如上述图2或图6的方法。

图13为本公开实施例提供的另一种集合类型数据的传输设备的结构示意图,如图13所示,本实施例的设备包括:

存储器41,用于存储处理器可执行指令的存储器;

处理器42,用于在计算机程序被执行时,实现如上述图8的方法。

上述实施例的设备,可以用于执行上述方法实施例的技术方案,其实现原理和技术效果类似,此处不再赘述。

本公开实施例提供一种计算机可读存储介质,计算机可读存储介质中存储有计算机执行指令,计算机执行指令被处理器执行时用于实现如图2或图6的集合类型数据的传输方法。

本公开实施例提供另一种计算机可读存储介质,计算机可读存储介质中存储有计算机执行指令,计算机执行指令被处理器执行时用于实现如图8的集合类型数据的传输方法。

上述实施例的计算机可读存储介质,可以用于执行上述方法实施例的技术方案,其实现原理和技术效果类似,此处不再赘述。

需要说明的是,在本文中,诸如“第一”和“第二”等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括要素的过程、方法、物品或者设备中还存在另外的相同要素。

以上仅是本公开的具体实施方式,使本领域技术人员能够理解或实现本公开。对这些实施例的多种修改对本领域的技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本公开的精神或范围的情况下,在其它实施例中实现。因此,本公开将不会被限制于本文的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。

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