CN113204683B - 信息重构方法和装置、存储介质及电子设备 - Google Patents

信息重构方法和装置、存储介质及电子设备 Download PDF

Info

Publication number
CN113204683B
CN113204683B CN202110626928.0A CN202110626928A CN113204683B CN 113204683 B CN113204683 B CN 113204683B CN 202110626928 A CN202110626928 A CN 202110626928A CN 113204683 B CN113204683 B CN 113204683B
Authority
CN
China
Prior art keywords
field
target
value
type
byte
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
Application number
CN202110626928.0A
Other languages
English (en)
Other versions
CN113204683A (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 Chengdu Co Ltd
Original Assignee
Tencent Technology Chengdu 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 Chengdu Co Ltd filed Critical Tencent Technology Chengdu Co Ltd
Priority to CN202110626928.0A priority Critical patent/CN113204683B/zh
Publication of CN113204683A publication Critical patent/CN113204683A/zh
Application granted granted Critical
Publication of CN113204683B publication Critical patent/CN113204683B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/90Details of database functions independent of the retrieved data types
    • G06F16/903Querying
    • G06F16/90335Query processing
    • G06F16/90344Query processing by using string matching techniques
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/90Details of database functions independent of the retrieved data types
    • G06F16/903Querying
    • G06F16/90335Query processing
    • G06F16/90348Query processing by searching ordered data, e.g. alpha-numerically ordered data

Abstract

本发明公开了一种信息重构方法和装置、存储介质及电子设备。其中,该方法包括:获取对第一数据结构执行序列化操作得到的目标字节流;根据目标字节流,确定第一数据结构的目标格式信息;根据目标格式信息,生成目标中间文件;根据目标中间文件,对目标字节流执行反序列化操作,得到重构的第二数据结构。本发明解决了在没有中间文件的情况下,无法对序列化的字节流数据反序列化的技术问题。

Description

信息重构方法和装置、存储介质及电子设备
技术领域
本发明涉及计算机领域,具体而言,涉及一种信息重构方法和装置、存储介质及电子设备。
背景技术
在网络抓取数据的解析、应用程序中网络数据的监控等应用场景中,通过对数据的序列化和反序列化可以实现远程通信,以及数据的持久化存储。
序列化和反序列化是对称操作,需要依赖于由中间文件衍生而来的平台中间类实现。通过中间类将原始数据进行序列化得到字节流数据,再使用相同的中间类对字节流数据进行反序列化得到原始数据。然而在当仅有序列化之后的字节流数据,在执行反序列化操作时若没有中间文件,相关技术中无法得到原始数据。
针对相关技术中,在没有中间文件的情况下,无法对序列化的字节流数据反序列化的问题,目前尚未提出有效的解决方案。
发明内容
本发明实施例提供了一种信息重构方法和装置、存储介质及电子设备,以至少解决在没有中间文件的情况下,无法对序列化的字节流数据反序列化的技术问题。
根据本发明实施例的一个方面,提供了一种信息重构方法,包括:获取对第一数据结构执行序列化操作得到的目标字节流,其中,所述第一数据结构包括第一字段集合,所述第一字段集合中的每个字段包括具有对应关系的字段类型、字段名称以及字段取值;根据所述目标字节流,确定所述第一数据结构的目标格式信息,其中,所述目标格式信息包括所述每个字段的字段标识、所述每个字段中的字段类型、以及所述目标字节流中与所述每个字段中的字段取值对应的字符串;根据所述目标格式信息,生成目标中间文件,其中,所述目标中间文件中包括第二字段集合,所述第二字段集合中的每个字段包括具有对应关系的字段类型、字段名称以及字段标识,所述第一字段集合中的字段类型与所述第二字段集合中的字段类型相同,所述第一字段集合中的字段名称与所述第二字段集合中的字段名称至少部分相同;根据所述目标中间文件,对所述目标字节流执行反序列化操作,得到重构的第二数据结构,其中,所述第二数据结构包括第三字段集合,所述第三字段集合中的每个字段包括具有对应关系的字段类型、字段名称以及字段取值,所述第二字段集合中的字段类型和字段名称与所述第三字段集合中的字段类型和字段名称相同,所述第一字段集合中的字段取值与所述第三字段集合中的字段取值相同。
可选地,所述根据所述目标字节流,确定所述第一数据结构的目标格式信息,包括:根据所述目标字节流中的第一字节,确定所述第一字段集合中的目标字段中的字段类型和字段标识,其中,所述第一字节用于指示所述目标字段中的字段类型和字段标识;根据所述第一字节指示的所述字段类型以及所述目标字节流中的第二字节,确定所述目标字节流中与所述目标字段中的字段取值对应的字符串,其中,所述第二字节用于指示与所述目标字段中的字段取值对应的字符串。
可选地,所述根据所述目标字节流中的第一字节,确定所述第一字段集合中的目标字段中的字段类型和字段标识,包括:在所述第一字节的取值等于对第一字段标识取值与第一类型标识取值进行或运算所得到的取值、且所述第一字段标识取值是将第二字段标识取值左移预设位数所得到的取值的情况下,将所述目标字段中的字段类型确定为所述第一类型标识所表示的第一字段类型,并将所述目标字段中的字段标识的取值确定为所述第二字段标识取值。
可选地,所述根据所述第一字节指示的所述字段类型以及所述目标字节流中的第二字节,确定所述目标字节流中与所述目标字段中的字段取值对应的字符串,包括:在所述第一字节指示的所述字段类型对应于第一存储方式、且所述第一存储方式所表示的字段长度为所述第二字节的取值时,从所述第二字节之后的字节开始截取长度为所述第二字节的取值的字符串,得到所述与所述目标字段中的字段取值对应的字符串,其中,所述第一存储方式是所述目标字段的存储方式,所述第一存储方式用于表示依次存储的是所述目标字段中的字段类型、所述目标字段中的字段取值对应的字段长度、以及所述目标字段中的字段取值。
可选地,所述根据所述第一字节指示的所述字段类型以及所述目标字节流中的第二字节,确定所述目标字节流中与所述目标字段中的字段取值对应的字符串,包括:在所述第一字节指示的所述字段类型对应于第二存储方式、且所述第二存储方式所表示的字段取值为所述第二字节的取值时,将所述第二字节确定为所述与所述目标字段中的字段取值对应的字符串,其中,所述第二存储方式是所述目标字段的存储方式,所述第二存储方式用于表示依次存储的是所述目标字段中的字段类型、以及所述目标字段中的字段取值。
可选地,所述根据所述目标格式信息,生成目标中间文件,包括:根据所述与所述每个字段中的字段取值对应的字符串,确定所述每个字段中的字段取值;根据所述每个字段中的字段取值所对应的语义类型,确定所述每个字段中的字段名称;根据所述目标格式信息中的所述每个字段的字段标识、所述每个字段中的字段类型、以及确定的所述每个字段中的字段名称,生成所述目标中间文件。
可选地,所述根据所述每个字段中的字段取值所对应的语义类型,确定所述每个字段中的字段名称,包括:在目标字段中的字段取值对应于预设的语义类型集合中的目标语义类型时,将所述目标字段中的字段名称确定为所述目标语义类型;在目标字段中的字段取值与所述语义类型集合中的语义类型都不对应时,将所述目标字段中的字段名称确定为预设的未知字段名称。
可选地,所述根据所述目标格式信息中的所述每个字段的字段标识、所述每个字段中的字段类型、以及确定的所述每个字段中的字段名称,生成所述目标中间文件,包括:将所述目标中间文件中的目标字段中的字段类型确定为等于所述目标格式信息中的所述目标字段中的字段类型;将所述目标中间文件中的所述目标字段中的字段名称确定为等于预先确定的字段名称,其中,所述预先确定的字段名称是根据所述目标字段中的字段取值所对应的语义类型确定出的字段名称;将所述目标中间文件中的所述目标字段的字段标识确定为等于所述目标格式信息中的所述目标字段的字段标识。
可选地,所述根据所述目标中间文件,对所述目标字节流执行反序列化操作,得到重构的第二数据结构,包括:根据所述目标字节流中的第一字节,确定所述第一字段集合中的目标字段中的字段类型和字段标识,其中,所述第一字节用于指示所述目标字段中的字段类型和字段标识;根据所述第一字节指示的所述字段类型以及所述目标字节流中的第二字节,确定所述目标字节流中与所述目标字段中的字段取值对应的字符串,其中,所述第二字节用于指示与所述目标字段中的字段取值对应的字符串;根据所述与所述目标字段中的字段取值对应的字符串,确定所述目标字段中的字段取值;在所述目标中间文件中查找与所述目标字段中的字段标识对应的字段;将确定出的所述目标字段中的字段取值赋值给查找到的字段中的字段名称,得到所述第二数据结构中的所述目标字段。
可选地,在所述获取对第一数据结构执行序列化操作得到的目标字节流之前,所述方法还包括:从第一应用中获取所述第一数据结构,其中,所述第一数据结构是所述第一应用产生的数据结构或者是所述第一应用接收的数据结构;对所述第一数据结构执行所述序列化操作,得到所述目标字节流。
可选地,在根据所述目标中间文件,对所述目标字节流执行反序列化操作,得到重构的第二数据结构之后,所述方法还包括:将所述第二数据结构发送给第二应用,其中,所述第二应用用于对所述第二数据结构进行显示或者进行目标处理操作。
根据本发明实施例的另一方面,还提供了一种信息重构装置,包括:获取模块,用于获取对第一数据结构执行序列化操作得到的目标字节流,其中,所述第一数据结构包括第一字段集合,所述第一字段集合中的每个字段包括具有对应关系的字段类型、字段名称以及字段取值;确定模块,用于根据所述目标字节流,确定所述第一数据结构的目标格式信息,其中,所述目标格式信息包括所述每个字段的字段标识、所述每个字段中的字段类型、以及所述目标字节流中与所述每个字段中的字段取值对应的字符串;生成模块,用于根据所述目标格式信息,生成目标中间文件,其中,所述目标中间文件中包括第二字段集合,所述第二字段集合中的每个字段包括具有对应关系的字段类型、字段名称以及字段标识,所述第一字段集合中的字段类型与所述第二字段集合中的字段类型相同,所述第一字段集合中的字段名称与所述第二字段集合中的字段名称至少部分相同;执行模块,用于根据所述目标中间文件,对所述目标字节流执行反序列化操作,得到重构的第二数据结构,其中,所述第二数据结构包括第三字段集合,所述第三字段集合中的每个字段包括具有对应关系的字段类型、字段名称以及字段取值,所述第二字段集合中的字段类型和字段名称与所述第三字段集合中的字段类型和字段名称相同,所述第一字段集合中的字段取值与所述第三字段集合中的字段取值相同。
根据本发明实施例的又一方面,还提供了一种计算机可读的存储介质,该计算机可读的存储介质中存储有计算机程序,其中,该计算机程序被设置为运行时执行上述信息重构方法。
根据本发明实施例的又一方面,还提供了一种电子设备,包括存储器和处理器,上述存储器中存储有计算机程序,上述处理器被设置为通过所述计算机程序执行上述的信息重构方法。
在本发明实施例中,通过根据对第一数据结构执行序列化操作得到的目标字节流,确定第一数据结构的目标格式信息,根据目标格式信息生成中间文件,根据中间文件对目标字节流执行反序列化操作,得到重构的第二数据结构。达到了在没有中间文件的情况下,对序列化的目标字节流进行反序列化的技术效果,进而解决了在没有中间文件的情况下,无法对序列化的字节流数据反序列化的技术问题。
附图说明
此处所说明的附图用来提供对本发明的进一步理解,构成本申请的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
图1是根据本发明实施例的一种可选的信息重构方法的应用环境的示意图;
图2是根据本发明实施例的一种可选的信息重构方法流程示意图;
图3是根据本发明实施例的一种可选的第一数据结构示意图;
图4是根据本发明实施例的一种可选的目标格式信息示意图;
图5是根据本发明实施例的一种可选的数据解码结果示意图;
图6是根据本发明实施例的一种可选的目标中间文件示意图;
图7是根据本发明实施例的一种可选的第二数据结构示意图;
图8是根据本发明实施例的一种可选的Message Structure编码形式示意图;
图9是根据本发明实施例的一种可选的T-L-V存储方式示意图;
图10是根据本发明实施例的一种可选的T-V存储方式示意图;
图11是根据本发明实施例的一种可选的中间文件示意图;
图12是根据本发明实施例的一种可选的信息重构装置的结构示意图;
图13是根据本发明实施例的一种可选的电子设备的结构示意图。
具体实施方式
为了使本技术领域的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分的实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。
需要说明的是,本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本发明的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
作为一个可选的实施方式,下面对本申请中出现的术语进行说明:
序列化、反序列化:序列化(Serialization)是指在计算机科学的数据处理过程中,将内存中的数据结构或者对象转换成可以取用的格式(比如保存为本地文件、转换成字节流数据通过网络通路发送给接收者),以便在恰当的时机能够在本地机器或者其他机器上恢复原先内存中的数据结构或者对象。其中,将特定格式数据(一般认为是字节流)恢复成原先内存中的数据结构或者对象的过程即是反序列化。
ProtoBuf:protocol buffers的简称,是一种序列化数据结构的协议。可支持c++\java\python\go\objective-c\c#\ruby等多种语言,广泛的应用于应用程序数据结构序列化的场景。下文部分场景简写为pb或者PB。
Message:在以proto的语法定义ProtoBuf数据源码时,用于定义一个数据结构的关键字,也可以理解为某一个pb类型的数据结构。
字段编号:也可以称为字段标识,在以proto的语法定义ProtoBuf数据源码时,每个数据结构的字段需要定义一个数值标记,同message内不同字段的字段编号不能重复。
根据本发明实施例的一个方面,提供了一种信息重构方法,可选地,作为一种可选的实施方式,上述信息重构方法可以但不限于应用于如图1所示的系统环境中,上述系统环境包括终端设备102、网络110和终端设备112,其中,终端设备102上可以设置有存储器104、处理器106和显示器108,上述终端设备102上可以运行有平台1,上述平台1可以是一种代码的运行环境,例如,java、python等,上述终端设备102可以通过平台1对第一数据结构执行序列化操作,得到目标字节流。上述存储器104可以用于存储数据,例如,第一数据结构中的数据,以及目标字节流等。上述处理器106可以用于对第一数据结构执行序列化操作。上述显示器108可以用于显示第一数据结果和目标字节流。
上述终端设备112上可以设置有存储器114、处理器116和显示器118,上述终端设备112上可以运行有平台2,上述平台2可以是一种代码的运行环境,例如,java、python等,平台2与上述平台1可以是相同的平台,也可以是不同的平台,例如,平台1和平台2可以都是java平台,或者平台1是java平台,平台2是python平台。上述终端设备112可以通过平台2对目标字节流执行反序列化操作,得到重构的第二数据结构。上述存储器114可以用于存储数据,例如,目标字节流,以及重构的第二数据结构中的数据等。上述处理器116可以用于对目标字节流执行反序列化操作。上述显示器118可以用于显示目标字节流和重构的第二数据机构。
上述网络110可以包括但不限于:有线网络,无线网络,其中,该有线网络包括:局域网、城域网和广域网,该无线网络包括:蓝牙、WIFI及其他实现无线通信的网络。上述仅是一种示例,本实施例中对此不作任何限定。
可选地,作为一种可选的实施方式,如图2所示,上述信息重构方法包括:
步骤S202,获取对第一数据结构执行序列化操作得到的目标字节流,其中,所述第一数据结构包括第一字段集合,所述第一字段集合中的每个字段包括具有对应关系的字段类型、字段名称以及字段取值;
其中,第一数据结构中可以包括一个字段,也可以包括多个字段,一个或多个字段构成第一字段集合,第一字段集合中的每个字段包括字段类型,字段名称和字段的取值。上述字段类型包括但不限于string、int32、int64、bytes等数据类型,字段名称可以根据实际情况设置,例如,可以是name、ID、age、address等。字段取值可以根据实际情况而定,例如,对于字段名称name的字段取值可以是“张三”,对于字段名称ID的字段取值可以是“1”等。
步骤S204,根据所述目标字节流,确定所述第一数据结构的目标格式信息,其中,所述目标格式信息包括所述每个字段的字段标识、所述每个字段中的字段类型、以及所述目标字节流中与所述每个字段中的字段取值对应的字符串;
其中,字段标识可以用于表示字段的序号。例如第一数据结构中包括4个字段,可以用1、2、3、4对每个字段进行标识,字段类型包括但不限于string、int32、int64、bytes等数据类型。字段取值可以使用字符串的形式进行表示,例如,在python平台中,上述字段取值可以是“张三”可以使用字符串“\345\274\240\344\270\211”表示。
步骤S206,根据所述目标格式信息,生成目标中间文件,其中,所述目标中间文件中包括第二字段集合,所述第二字段集合中的每个字段包括具有对应关系的字段类型、字段名称以及字段标识,所述第一字段集合中的字段类型与所述第二字段集合中的字段类型相同,所述第一字段集合中的字段名称与所述第二字段集合中的字段名称至少部分相同;
其中,上述字段类型包括但不限于string、int32、int64、bytes等数据类型。字段名称可以根据实际情况设置,例如,可以是name、ID、age、address等。字段标识可以用于表示字段的序号。例如第一数据结构中包括4个字段,可以用1、2、3、4对每个字段进行标识。
步骤S208,根据所述目标中间文件,对所述目标字节流执行反序列化操作,得到重构的第二数据结构,其中,所述第二数据结构包括第三字段集合,所述第三字段集合中的每个字段包括具有对应关系的字段类型、字段名称以及字段取值,所述第二字段集合中的字段类型和字段名称与所述第三字段集合中的字段类型和字段名称相同,所述第一字段集合中的字段取值与所述第三字段集合中的字段取值相同。
在上述实施例中,通过生成的目标中间文件可以对目标字节流进行反序列化,得到重构的第二数据结构。达到了在没有中间文件的情况下,可以使用生成的中间文件,对目标字节流进行反序列化的技术效果。
作为一个可选的实施方式,如图3所示是一种可选的序列化示意图,以图3所示的一种可选的第一数据结为例。其中,定义“student”的第一数据结构,该数据结构中的第一字段集合中包括“String name=“张三””、“int32 id=“1””、“String adress=“北京市西城区德胜门东大街8号””、“int32age=“18””四个字段,以字段“String name=“张三””为例,其中,“String”为字段类型,表示字符串的数据类型。“name”为字段名称,“张三”表示字段取值。对上述第一数据结构“student”执行序列化操作,得到图3所示的目标字节流。
作为一个可选的实施方式,以上述图3所示的第一数据结构“student”为例,如图4所示是根据本发明可选实施例的目标格式信息示意图,目标格式信息包括:“1string:“\345\274\240\344\270\211””、“2int32:1”等多个字段,以字段“1string:“\345\274\240\344\270\211””为例,其中,“1”为字段标识,可以用于表示目标格式信息中的第一个字段。string表示字段类型,“\345\274\240\344\270\211”为字段取值“张三”对应的字符串。为了更便捷地查看序列化数据中蕴含的内容,利用pb数据解码器查看其中内容,如图5所示是根据本发明可选实施例的数据解码结果示意图。图中,Field#1表示字段标识,string、Varint标识字段类型,Length表示字段长度。对于字段标识为Field#1,UTF8=“张三”表示字段取值是“张三”,对于字段标识为Field#2,Hex=01表示字段取值是01。
作为一个可选的实施方式,以上述图3所示的第一数据结构“student”为例,如图6所示是根据本发明可选实施例的目标中间文件示意图,目标中间文件中包括第二字段集合,其中,第二字段集合中包括“String name=1;”、“int32 unknown_int_a=2;”、“stringaddress=3;”、“int32unknown_int_a=4”四个字段,其中,以字段“String name=1;”为例,“String”表示字段类型,“name”表示字段名称,“1”表示字段标识。图6中的第二字段集合中的字段与图3中的第一字段集合中的字段进行对比,其中,第一字段集合中的字段类型与第二字段集合中的字段类型相同,第一字段集合中的字段名称“name”和“address”与第二字段集合中的字段名称“name”和“address”相同。
作为一个可选的实施方式,通过图6所示的目标中间文件,对图1所示的目标字节流进行反序列化,得到如图7所示的第二数据结构,图7所示的第二数据结构中包括第三字段集合,第三字段集合中包括“address={str}‘北京市西城区’”、“name={str}‘张三’”、“unknown_int_a={int}1”、“unknown_int_b={int}16”。以字段“address={str}‘北京市西城区’”为例,其中,str表示字段类型为字符串数据类型,address为字段名称,“北京市西城区”为字段取值。对比图6所示的第二字段集合和图7所示的第三字段集合,第二字段集合与第三字段集合中的字段类型相同,字段名称也相同。对比图3所示的第一字段集合和图7所示的第三字段集合,第三字段集合与第一字段集合中的字段取值相同。
通过上述实施例,根据对第一数据结构执行序列化操作得到的目标字节流,可以生成目标中间文件,通过生成的目标中间文件可以对目标字节流进行反序列化,得到重构的第二数据机构。通过本申请,在没有中间文件的情况下,可以对序列化的字节流进行反序列化。
可选地,所述根据所述目标字节流,确定所述第一数据结构的目标格式信息,包括:根据所述目标字节流中的第一字节,确定所述第一字段集合中的目标字段中的字段类型和字段标识,其中,所述第一字节用于指示所述目标字段中的字段类型和字段标识;根据所述第一字节指示的所述字段类型以及所述目标字节流中的第二字节,确定所述目标字节流中与所述目标字段中的字段取值对应的字符串,其中,所述第二字节用于指示与所述目标字段中的字段取值对应的字符串。
作为一个可选的实施方式,以图3所示的目标字节流为例,以第一字节是0a为例,通过0a可以确定字段的类型和字段标识,第二字节是06,06表示字符串的长度为6,在目标字节流的第二字节06后截取6个字符串长度得到字符串“e5bca0e4b889”,其中,“e5bca0e4b889”是“张三”的utf-8编码。
可选地,所述根据所述目标字节流中的第一字节,确定所述第一字段集合中的目标字段中的字段类型和字段标识,包括:在所述第一字节的取值等于对第一字段标识取值与第一类型标识取值进行或运算所得到的取值、且所述第一字段标识取值是将第二字段标识取值左移预设位数所得到的取值的情况下,将所述目标字段中的字段类型确定为所述第一类型标识所表示的第一字段类型,并将所述目标字段中的字段标识的取值确定为所述第二字段标识取值。
作为一个可选的实施方式,在目标字节流中查找第一个第一字节0a,第一字节的二进制取值为0000 1010,第二字段标识取值为1,将第二字段标识取值1左移3位得到第一字段标识取值0000 1000,第一类型标识取值可以是二进制0000 0010,将第一字段标识取值0000 1000与第一类型标识取值0000 0010执行或运算,得到0000 1010,该值与第一字节的二进制取值为0000 1010相同。第一类型标识取值0000 0010表示的类型是变长的字符串类型,则可以确定段的字段类型为字符串类型,该段的字段标识是1。也就是字段标识是1的字段类型是字符串类型。对于字符串类型,第一字节0a后的第二字节06表示字符串的长度为6,在目标字节流的第二字节06后截取6个字符串长度得到字符串“e5bca0e4b889”,其中,“e5bca0e4b889”是“张三”的utf-8编码。由此可以得到字段标识是1的字段类型是字符串string类型,该段中字段取值对应的字符串是“e5bca0e4b889”。
作为一个可选的实施方式,在得到字段标识1中的“e5bca0e4b889”的utf-8编码后,在目标字节流重查找第二个第一字节10,第一字节10的二进制取值为0001 0000,第二字段标识取值为0000 0010(十进制为2),将第二字段标识取值左移3位得到第一字段标识取值0001 0000,第一类型标识取值可以是0000 0000,将第一字段标识取值0001 0000与第一类型标识取值0000 0000执行或运算,得到0001 0000,该值与第一字节的二进制取值为0001 0000。第一类型标识取值0000 0000表示的类型是int 32类型,则可以确定段的字段类型为int 32类型,该段的字段标识是2。第一字节10后的第二字节为01,01是该段的字段取值。由此可以得到字段标识是2的字段类型是int 32,字段取值是十六进制01(对应于十进制1)。
作为一个可选的实施方式,在得到字段标识2中的字段取值1后,在目标字节流重查找第三个第一字节1a,第一字节1a的二进制取值为00011010,第二字段标识取值为00000011(十进制为3),将第二字段标识取值左移3位得到第一字段标识取值0001 1000,第一类型标识取值可以是0000 0010,将第一字段标识取值0001 1000与第一类型标识取值00000010执行或运算,得到0001 1010,该值与第一字节的二进制取值为0001 1010。由于第一类型标识取值0000 0010表示的类型是字符串string类型,则可以确定段的字段类型为string类型,该段的字段标识是3。对于字符串类型,第一字节1a后的第二字节2e表示字符串的长度为46,在目标字节流的第二字节2e后截取46个字符串长度得到字符串“e4b8ade5…8fb7”,其中,字符串“e4b8ade5…8fb7”是“中国北京市西城区德胜门东大街8号”的字符串编码值。由此可以得到字段标识是3的字段类型是字符串string类型,该段中字段取值对应的字符串是“e4b8ade5…8fb7”。
作为一个可选的实施方式,在得到字段标识3中的字段取值后,在目标字节流重查找第四个第一字节20,第一字节20的二进制取值为00100000,第二字段标识取值为00000100(十进制为4),将第二字段标识取值左移3位得到第一字段标识取值0010 0000,第一类型标识取值是00000000,将第一字段标识取值0010 0000与第一类型标识取值0000 0000执行或运算,得到0010 0000,该值与第一字节的二进制取值为0010 0000。由于第一类型标识取值0000 0000表示的类型是字符串int32类型,则可以确定段的字段类型为int32类型,该段的字段标识是4。字段取值是十六进制10(对应十进制16)。
通过上述实施例,根据序列化的目标字节流可以生成目标中间文件,通过目标中间文件可以对目标字节流反序列化。达到了在没有中间文件的情况下,使用生成的中间文件即可对目标字节流进行反序列化的技术效果。
可选地,所述根据所述第一字节指示的所述字段类型以及所述目标字节流中的第二字节,确定所述目标字节流中与所述目标字段中的字段取值对应的字符串,包括:在所述第一字节指示的所述字段类型对应于第一存储方式、且所述第一存储方式所表示的字段长度为所述第二字节的取值时,从所述第二字节之后的字节开始截取长度为所述第二字节的取值的字符串,得到所述与所述目标字段中的字段取值对应的字符串,其中,所述第一存储方式是所述目标字段的存储方式,所述第一存储方式用于表示依次存储的是所述目标字段中的字段类型、所述目标字段中的字段取值对应的字段长度、以及所述目标字段中的字段取值。
作为一个可选的实施方式,对于序列化数据结构的协议PB采用了许多高效率编码方式,使得序列化之后的数据量小。包括“Base 128Varints”编码方式表述整数数据(这种编码方式在表示数值较小的数据时(1-2个字节表示),相比于传统的整型数据(固定4字节)更为节省空间。在实际应用中,数值小的数据占大多数,压缩效果明显)、“MessageStructure”的编码形式表示数据结构、有符号整数编码、字符串表示优化等等。“MessageStructure”是PB协议表示数据结构的编码形式,如图8所示是根据本发明可选实施例的Message Structure编码形式示意图。message是一系列键值对。message的二进制版本使用字段号(field's number和wire_type)作为key,其中,图中Field1、Field2和Field3为field's number,也称为字段标识,“<<”表示左移,“|”表示或运算,wire_type表示类型标识,类型标识可以根据实际情况而定,例如,0000 0010表示的类型是字符串string类型,0000 0000表示的类型是字符串int32类型。根据Tag中的取值可以得到字段标识和字段类型。Value中存储的可以是字段取值,例如,上述“e5bca0e4b889”,“01”,“e4b8ade5…8fb7”,“10”。每个字段的名称和类型在解码端通过引用PB中间文件来确定。获得键值对key-value数据;分析key数据可以知道字段的数据的类型以及字段编号信息。基于这项信息,可以推断pb中间文件中的部分信息;再结合数据数值的含义,给字段赋予有意义的名字,这样就可以推断出pb中间文件。
作为一个可选的实施方式,Protobuf序列化数据中数据编码方式和存储方式如下表所示:
Figure BDA0003101704980000151
Figure BDA0003101704980000161
上述第一存储方式可以是T-L-V存储方式,如图9所示是根据本发明可选实施例的T-L-V存储方式示意图,存储方式中T表示type,V表示value,L表示length。对于变长数据(比如列表类型数据),增加L表示长度信息。根据图8中的Tag可以得到字段类型,length表示字段长度,Value中存储了字段取值。
作为一个可选的实施方式,以上述第一字节“0a”为例,第一类型标识取值00000010表示的类型是变长的字符串类型,则可以确定段的字段类型为字符串类型,第一字节0a后的第二字节06表示字符串的长度为6,在目标字节流的第二字节06后截取6个字符串长度得到字符串“e5bca0e4b889”,其中,“e5bca0e4b889”是“张三”的utf-8编码。
作为一个可选的实施方式,以上述第一字节1a为例,第一类型标识取值0000 0010表示的类型是字符串string类型,则可以确定段的字段类型为string类型。对于字符串类型,第一字节1a后的第二字节2e表示字符串的长度为46,在目标字节流的第二字节2e后截取46个字符串长度得到字符串“e4b8ade5…8fb7”,其中,字符串“e4b8ade5…8fb7”是“中国北京市西城区德胜门东大街8号”的字符串编码值。
在上述实施例中,第一类型标识0000 0010表示的类型是字符串string类型是用于说明本实施例,并不以此造成限定,0000 0010还表示bytes,embedded message等字段类型。通过上述实施例,可以通过T-L-V存储方式,通过目标字节流中的字节取值,可以得到字段类型、字段长度和字段取值。达到了通过目标字节流生成中间文件,通过中间文件对目标字节流进行反序列化的效果。
可选地,所述根据所述第一字节指示的所述字段类型以及所述目标字节流中的第二字节,确定所述目标字节流中与所述目标字段中的字段取值对应的字符串,包括:在所述第一字节指示的所述字段类型对应于第二存储方式、且所述第二存储方式所表示的字段取值为所述第二字节的取值时,将所述第二字节确定为所述与所述目标字段中的字段取值对应的字符串,其中,所述第二存储方式是所述目标字段的存储方式,所述第二存储方式用于表示依次存储的是所述目标字段中的字段类型、以及所述目标字段中的字段取值。
作为一个可选的实施方式,上述第二存储方式可以是T-V存储方式。如图10所示是根据本发明可选实施例的T-V存储方式示意图,存储方式中T表示type,V表示value。对于普通的varint等长度确定的数据类型,可以使用T-V存储方式。
以上述第一字节10为例,第一类型标识取值0000 0000表示的类型是int 32类型,对于int 32类型通过上述Protobuf序列化数据存储方式的表格可以确定对应的存储方式是第二存储方式T-V,第一字节10后的第二字节为01,01是该段的字段取值。
以上述第一字节20为例,第一类型标识取值0000 0000表示的类型是字符串int32类型,则可以确定段的字段类型为int32类型。字段取值是十六进制10(对应十进制16)。
在上述实施例中,第一类型标识0000 0000表示的类型是字符串int32类型是用于说明本实施例,并不以此造成限定,0000 0000还表示int64、uint64等字段类型。通过上述实施例,可以通过T-V存储方式,通过目标字节流中的字节取值,可以得到字段类型和字段取值。达到了通过目标字节流生成中间文件,通过中间文件对目标字节流进行反序列化的效果。
可选地,所述根据所述目标格式信息,生成目标中间文件,包括:根据所述与所述每个字段中的字段取值对应的字符串,确定所述每个字段中的字段取值;根据所述每个字段中的字段取值所对应的语义类型,确定所述每个字段中的字段名称;根据所述目标格式信息中的所述每个字段的字段标识、所述每个字段中的字段类型、以及确定的所述每个字段中的字段名称,生成所述目标中间文件。
作为一个可选的实施方式,以图4所示的目标格式信息为例,其中,1、2、3、4表示字段标识,以字段标识为1的字段为例,该段字段取值对应的字符串为“\345\274\240\344\270\211”,对应的字段取值为“张三”。由于“张三”通常用于表示人名,可以确定该段的字段名称为name。作为一个可选的实施方式,在得到字段标识、字段类型和字段名称后可以得到中间文件。在本实施例中,通过字段取值可以推出字段名称,达到了在没有中间文件的情况下,可以根据目标字节流确定字段名称,进而生成中间文件的效果。
可选地,所述根据所述每个字段中的字段取值所对应的语义类型,确定所述每个字段中的字段名称,包括:在目标字段中的字段取值对应于预设的语义类型集合中的目标语义类型时,将所述目标字段中的字段名称确定为所述目标语义类型;在目标字段中的字段取值与所述语义类型集合中的语义类型都不对应时,将所述目标字段中的字段名称确定为预设的未知字段名称。
作为一个可选的实施方式,可以预先设置语义类型集合,例如,张三、李四、王五,对应的语义类型为name,北京市西城区、湖南省长沙市对应的语义类型是address等。具体的语义类型集合可以根据实际情况而定,在本实施例中,以字段标识为1的字段取值为“张三”为例,通过查找语义类型集合可以确定“张三”的目标语义类型是name,进而可以得到该段的字段名称是name。以字段标识为3的字段取值为“中国北京市西城区德胜门东大街8号”为例,通过查找语义类型集合可以确定“中国北京市西城区德胜门东大街8号”的目标语义类型是address,进而可以得到该段的字段名称是address。在本实施例中,若字段取值与所述语义类型集合中的语义类型都不对应时,可以将该段的字段名称设置为预设的未知字段名称,如unknown_int_a、unknown_int_b。
可选地,所述根据所述目标格式信息中的所述每个字段的字段标识、所述每个字段中的字段类型、以及确定的所述每个字段中的字段名称,生成所述目标中间文件,包括:将所述目标中间文件中的目标字段中的字段类型确定为等于所述目标格式信息中的所述目标字段中的字段类型;将所述目标中间文件中的所述目标字段中的字段名称确定为等于预先确定的字段名称,其中,所述预先确定的字段名称是根据所述目标字段中的字段取值所对应的语义类型确定出的字段名称;将所述目标中间文件中的所述目标字段的字段标识确定为等于所述目标格式信息中的所述目标字段的字段标识。
作为一个可选的实施方式,以图4所示的目标格式信息为例,在目标格式信息中确定了字段标识1、2、3、4,以及每个字段标识对应的字段类型,以及字段取值,根据字段取值的语义类型可以确定出该段的字段名称。将字段标识对应的字段类型、字段名称设置为中间文件的字段标识、字段类型、字段名称。如图11所示是根据本发明可选实施例的中间文件示意图,图中的1、2、3、4表示字段标识,对应于图4所示的目标格式信息中的字段标识1、2、3、4,string、int32表示字段类型,对应于图4所示的目标格式信息中的字段类型,name、address为字段名称,是根据目标格式信息中的字段取值对应的字符串得到的,unknown_int_a、unknown_int_b是预设的未知字段名称。在本实施例中,通过目标格式信息可以生成中间文件,通过中间文件可以对目标字节流反序列化。
可选地,所述根据所述目标中间文件,对所述目标字节流执行反序列化操作,得到重构的第二数据结构,包括:根据所述目标字节流中的第一字节,确定所述第一字段集合中的目标字段中的字段类型和字段标识,其中,所述第一字节用于指示所述目标字段中的字段类型和字段标识;根据所述第一字节指示的所述字段类型以及所述目标字节流中的第二字节,确定所述目标字节流中与所述目标字段中的字段取值对应的字符串,其中,所述第二字节用于指示与所述目标字段中的字段取值对应的字符串;根据所述与所述目标字段中的字段取值对应的字符串,确定所述目标字段中的字段取值;在所述目标中间文件中查找与所述目标字段中的字段标识对应的字段;将确定出的所述目标字段中的字段取值赋值给查找到的字段中的字段名称,得到所述第二数据结构中的所述目标字段。
作为一个可选的实施方式,在目标字节流中查找第一个第一字节0a,第一字节的二进制取值为0000 1010,第二字段标识取值为1,将第二字段标识取值1左移3位得到第一字段标识取值0000 1000,第一类型标识取值可以是二进制0000 0010,将第一字段标识取值0000 1000与第一类型标识取值0000 0010执行或运算,得到0000 1010,该值与第一字节的二进制取值为0000 1010相同。第一类型标识取值0000 0010表示的类型是变长的字符串类型,则可以确定段的字段类型为字符串类型,该段的字段标识是1。也就是字段标识是1的字段类型是字符串类型。对于字符串类型,第一字节0a后的第二字节06表示字符串的长度为6,在目标字节流的第二字节06后截取6个字符串长度得到字符串“e5bca0e4b889”,其中,“e5bca0e4b889”是“张三”的utf-8编码。由此可以得到字段标识是1的字段类型是字符串string类型,该段中字段取值是“张三”。
作为一个可选的实施方式,在得到字段标识1中的“e5bca0e4b889”的utf-8编码后,在目标字节流重查找第二个第一字节10,第一字节10的二进制取值为0001 0000,第二字段标识取值为0000 0010(十进制为2),将第二字段标识取值左移3位得到第一字段标识取值0001 0000,第一类型标识取值可以是0000 0000,将第一字段标识取值0001 0000与第一类型标识取值0000 0000执行或运算,得到0001 0000,该值与第一字节的二进制取值为0001 0000。第一类型标识取值0000 0000表示的类型是int 32类型,则可以确定段的字段类型为int 32类型,该段的字段标识是2。第一字节10后的第二字节为01,01是该段的字段取值。由此可以得到字段标识是2的字段类型是int 32,字段取值是十六进制01(对应于十进制1)。
作为一个可选的实施方式,在得到字段标识2中的字段取值1后,在目标字节流重查找第三个第一字节1a,第一字节1a的二进制取值为00011010,第二字段标识取值为00000011(十进制为3),将第二字段标识取值左移3位得到第一字段标识取值0001 1000,第一类型标识取值可以是0000 0010,将第一字段标识取值0001 1000与第一类型标识取值00000010执行或运算,得到0001 1010,该值与第一字节的二进制取值为0001 1010。由于第一类型标识取值0000 0010表示的类型是字符串string类型,则可以确定段的字段类型为string类型,该段的字段标识是3。对于字符串类型,第一字节1a后的第二字节2e表示字符串的长度为46,在目标字节流的第二字节2e后截取46个字符串长度得到字符串“e4b8ade5…8fb7”,对应的字段取值是“中国北京市西城区德胜门东大街8号”的字符串编码值。由此可以得到字段标识是3的字段类型是字符串string类型,该段中字段取值对应的字符串是“e4b8ade5…8fb7”。
作为一个可选的实施方式,在得到字段标识3中的字段取值后,在目标字节流重查找第四个第一字节20,第一字节20的二进制取值为00100000,第二字段标识取值为00000100(十进制为4),将第二字段标识取值左移3位得到第一字段标识取值0010 0000,第一类型标识取值是00000000,将第一字段标识取值0010 0000与第一类型标识取值0000 0000执行或运算,得到0010 0000,该值与第一字节的二进制取值为0010 0000。由于第一类型标识取值0000 0000表示的类型是字符串int32类型,则可以确定段的字段类型为int32类型,该段的字段标识是4。字段取值是十六进制10(对应十进制16)。
作为一个可选的实施方式,在通过目标字节流可以得到上述字段标识,以及字段标识对应字段取值。通过字段标识与中间文件进行匹配,将字段取值赋给中间文件的字段名称,例如,对于字段标识为1的字段,字段取值为“张三”,将其赋给中间文件字段标识为1对应的“name”字段名称。对于字段标识为2的字段,字段取值为“1”,将其赋给中间文件字段标识为2对应的“unknown_int_a”字段名称。对于字段标识为3的字段,字段取值为“中国北京市西城区德胜门东大街8号”,将其赋给中间文件字段标识为3对应的“address”字段名称。对于字段标识为4的字段,字段取值为“16”,将其赋给中间文件字段标识为4对应的“unknown_int_b”字段名称。在本实施例中,通过生成的中间文件对目标字节流进行反序列化得到第二数据结构,达到了在没有中间文件的情况下,可以对目标字节流进行反序列化的效果。
可选地,在所述获取对第一数据结构执行序列化操作得到的目标字节流之前,所述方法还包括:从第一应用中获取所述第一数据结构,其中,所述第一数据结构是所述第一应用产生的数据结构或者是所述第一应用接收的数据结构;对所述第一数据结构执行所述序列化操作,得到所述目标字节流。
作为一个可选的实施方式,上述第一应用可以是应用程序,例如可以是用于网络抓取数据的应用程序,也可以是网络数据监控的应用程序。以网络抓取为例,可以在互联网教学应用程序中抓取学生数据,例如上述Student数据结构,上述Student数据结构可以是互联网教学应用程序中生成的数据结构,也可以是互联网教学应用程序在其他服务器或者设备中获取到的数据结构。通过现有技术中的序列化操作,对上述第一数据结构执行序列化操作得到目标字节流。上述第一应用也可以是运行环境,如java、python运行环境,第一数据机构可以是在运行环境中生成的,也可以是运行环境在服务器或设备用获取的数据。
可选地,在根据所述目标中间文件,对所述目标字节流执行反序列化操作,得到重构的第二数据结构之后,所述方法还包括:将所述第二数据结构发送给第二应用,其中,所述第二应用用于对所述第二数据结构进行显示或者进行目标处理操作。
在本实施例中,第二应用与第一应用可以是相同的应用,也可以是不同的应用。以第一应用是java运行环境为例,第二应用可以是java运行环境,也可以是python运行环境。可以在java运行环境对第一数据结构进行序列化得到目标字节流,在python运行环境中对目标字节流进行反序列化得到第二数据结构,在python运行环境显示第二数据结构或对第二数据结构执行相应的处理。
需要说明的是,对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明并不受所描述的动作顺序的限制,因为依据本发明,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本发明所必须的。
根据本发明实施例的另一个方面,还提供了一种用于实施上述信息重构方法的信息重构装置。如图12所示,该装置包括:获取模块1202,用于获取对第一数据结构执行序列化操作得到的目标字节流,其中,所述第一数据结构包括第一字段集合,所述第一字段集合中的每个字段包括具有对应关系的字段类型、字段名称以及字段取值;确定模块1204,用于根据所述目标字节流,确定所述第一数据结构的目标格式信息,其中,所述目标格式信息包括所述每个字段的字段标识、所述每个字段中的字段类型、以及所述目标字节流中与所述每个字段中的字段取值对应的字符串;生成模块1206,用于根据所述目标格式信息,生成目标中间文件,其中,所述目标中间文件中包括第二字段集合,所述第二字段集合中的每个字段包括具有对应关系的字段类型、字段名称以及字段标识,所述第一字段集合中的字段类型与所述第二字段集合中的字段类型相同,所述第一字段集合中的字段名称与所述第二字段集合中的字段名称至少部分相同;执行模块1208,用于根据所述目标中间文件,对所述目标字节流执行反序列化操作,得到重构的第二数据结构,其中,所述第二数据结构包括第三字段集合,所述第三字段集合中的每个字段包括具有对应关系的字段类型、字段名称以及字段取值,所述第二字段集合中的字段类型和字段名称与所述第三字段集合中的字段类型和字段名称相同,所述第一字段集合中的字段取值与所述第三字段集合中的字段取值相同。
可选地,上述装置用于根据所述目标字节流中的第一字节,确定所述第一字段集合中的目标字段中的字段类型和字段标识,其中,所述第一字节用于指示所述目标字段中的字段类型和字段标识;根据所述第一字节指示的所述字段类型以及所述目标字节流中的第二字节,确定所述目标字节流中与所述目标字段中的字段取值对应的字符串,其中,所述第二字节用于指示与所述目标字段中的字段取值对应的字符串。
可选地,上述装置用于在所述第一字节的取值等于对第一字段标识取值与第一类型标识取值进行或运算所得到的取值、且所述第一字段标识取值是将第二字段标识取值左移预设位数所得到的取值的情况下,将所述目标字段中的字段类型确定为所述第一类型标识所表示的第一字段类型,并将所述目标字段中的字段标识的取值确定为所述第二字段标识取值。
可选地,上述装置用于在所述第一字节指示的所述字段类型对应于第一存储方式、且所述第一存储方式所表示的字段长度为所述第二字节的取值时,从所述第二字节之后的字节开始截取长度为所述第二字节的取值的字符串,得到所述与所述目标字段中的字段取值对应的字符串,其中,所述第一存储方式是所述目标字段的存储方式,所述第一存储方式用于表示依次存储的是所述目标字段中的字段类型、所述目标字段中的字段取值对应的字段长度、以及所述目标字段中的字段取值。
可选地,上述装置用于在所述第一字节指示的所述字段类型对应于第二存储方式、且所述第二存储方式所表示的字段取值为所述第二字节的取值时,将所述第二字节确定为所述与所述目标字段中的字段取值对应的字符串,其中,所述第二存储方式是所述目标字段的存储方式,所述第二存储方式用于表示依次存储的是所述目标字段中的字段类型、以及所述目标字段中的字段取值。
可选地,上述装置用于根据所述与所述每个字段中的字段取值对应的字符串,确定所述每个字段中的字段取值;根据所述每个字段中的字段取值所对应的语义类型,确定所述每个字段中的字段名称;根据所述目标格式信息中的所述每个字段的字段标识、所述每个字段中的字段类型、以及确定的所述每个字段中的字段名称,生成所述目标中间文件。
可选地,上述装置用于在目标字段中的字段取值对应于预设的语义类型集合中的目标语义类型时,将所述目标字段中的字段名称确定为所述目标语义类型;在目标字段中的字段取值与所述语义类型集合中的语义类型都不对应时,将所述目标字段中的字段名称确定为预设的未知字段名称。
可选地,上述装置用于将所述目标中间文件中的目标字段中的字段类型确定为等于所述目标格式信息中的所述目标字段中的字段类型;将所述目标中间文件中的所述目标字段中的字段名称确定为等于预先确定的字段名称,其中,所述预先确定的字段名称是根据所述目标字段中的字段取值所对应的语义类型确定出的字段名称;将所述目标中间文件中的所述目标字段的字段标识确定为等于所述目标格式信息中的所述目标字段的字段标识。
可选地,上述装置用于根据所述目标字节流中的第一字节,确定所述第一字段集合中的目标字段中的字段类型和字段标识,其中,所述第一字节用于指示所述目标字段中的字段类型和字段标识;根据所述第一字节指示的所述字段类型以及所述目标字节流中的第二字节,确定所述目标字节流中与所述目标字段中的字段取值对应的字符串,其中,所述第二字节用于指示与所述目标字段中的字段取值对应的字符串;根据所述与所述目标字段中的字段取值对应的字符串,确定所述目标字段中的字段取值;在所述目标中间文件中查找与所述目标字段中的字段标识对应的字段;将确定出的所述目标字段中的字段取值赋值给查找到的字段中的字段名称,得到所述第二数据结构中的所述目标字段。
可选地,上述装置用于在所述获取对第一数据结构执行序列化操作得到的目标字节流之前,从第一应用中获取所述第一数据结构,其中,所述第一数据结构是所述第一应用产生的数据结构或者是所述第一应用接收的数据结构;对所述第一数据结构执行所述序列化操作,得到所述目标字节流。
可选地,上述装置用于在根据所述目标中间文件,对所述目标字节流执行反序列化操作,得到重构的第二数据结构之后,将所述第二数据结构发送给第二应用,其中,所述第二应用用于对所述第二数据结构进行显示或者进行目标处理操作。
根据本发明实施例的又一个方面,还提供了一种用于实施上述信息重构方法的电子设备,该电子设备可以是图13所示的终端设备或服务器。本实施例以该电子设备为服务器为例来说明。如图13所示,该电子设备包括存储器1302和处理器1304,该存储器1302中存储有计算机程序,该处理器1304被设置为通过计算机程序执行上述任一项方法实施例中的步骤。
可选地,在本实施例中,上述电子设备可以位于计算机网络的多个网络设备中的至少一个网络设备。
可选地,在本实施例中,上述处理器可以被设置为通过计算机程序执行以下步骤:
S1,获取对第一数据结构执行序列化操作得到的目标字节流,其中,所述第一数据结构包括第一字段集合,所述第一字段集合中的每个字段包括具有对应关系的字段类型、字段名称以及字段取值;
S2,根据所述目标字节流,确定所述第一数据结构的目标格式信息,其中,所述目标格式信息包括所述每个字段的字段标识、所述每个字段中的字段类型、以及所述目标字节流中与所述每个字段中的字段取值对应的字符串;
S3,根据所述目标格式信息,生成目标中间文件,其中,所述目标中间文件中包括第二字段集合,所述第二字段集合中的每个字段包括具有对应关系的字段类型、字段名称以及字段标识,所述第一字段集合中的字段类型与所述第二字段集合中的字段类型相同,所述第一字段集合中的字段名称与所述第二字段集合中的字段名称至少部分相同;
S4,根据所述目标中间文件,对所述目标字节流执行反序列化操作,得到重构的第二数据结构,其中,所述第二数据结构包括第三字段集合,所述第三字段集合中的每个字段包括具有对应关系的字段类型、字段名称以及字段取值,所述第二字段集合中的字段类型和字段名称与所述第三字段集合中的字段类型和字段名称相同,所述第一字段集合中的字段取值与所述第三字段集合中的字段取值相同。
可选地,本领域普通技术人员可以理解,图13所示的结构仅为示意,电子装置电子设备也可以是智能手机(如Android手机、iOS手机等)、平板电脑、掌上电脑以及移动互联网设备(Mobile Internet Devices,MID)、PAD等终端设备。图13其并不对上述电子装置电子设备的结构造成限定。例如,电子装置电子设备还可包括比图13中所示更多或者更少的组件(如网络接口等),或者具有与图13所示不同的配置。
其中,存储器1302可用于存储软件程序以及模块,如本发明实施例中的信息重构方法和装置对应的程序指令/模块,处理器1304通过运行存储在存储器1302内的软件程序以及模块,从而执行各种功能应用以及数据处理,即实现上述的信息重构方法。存储器1302可包括高速随机存储器,还可以包括非易失性存储器,如一个或者多个磁性存储装置、闪存、或者其他非易失性固态存储器。在一些实例中,存储器1302可进一步包括相对于处理器1304远程设置的存储器,这些远程存储器可以通过网络连接至终端。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。其中,存储器1302具体可以但不限于用于存储第一数据结构、目标字节流、目标格式信息、标中间文件、第二数据结构等信息。作为一种示例,如图13所示,上述存储器1302中可以但不限于包括上述信息重构装置中的获取模块1202、确定模块1204、生成模块1206及执行模块1208。此外,还可以包括但不限于上述信息重构装置中的其他模块单元,本示例中不再赘述。
可选地,上述的传输装置1306用于经由一个网络接收或者发送数据。上述的网络具体实例可包括有线网络及无线网络。在一个实例中,传输装置1306包括一个网络适配器(Network Interface Controller,NIC),其可通过网线与其他网络设备与路由器相连从而可与互联网或局域网进行通讯。在一个实例中,传输装置1306为射频(Radio Frequency,RF)模块,其用于通过无线方式与互联网进行通讯。
此外,上述电子设备还包括:显示器1308,用于显示上述第二数据结构;和连接总线1310,用于连接上述电子设备中的各个模块部件。
在其他实施例中,上述终端设备或者服务器可以是一个分布式系统中的一个节点,其中,该分布式系统可以为区块链系统,该区块链系统可以是由该多个节点通过网络通信的形式连接形成的分布式系统。其中,节点之间可以组成点对点(P2P,Peer To Peer)网络,任意形式的计算设备,比如服务器、终端等电子设备都可以通过加入该点对点网络而成为该区块链系统中的一个节点。
根据本申请的一个方面,提供了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行上述各种可选实现方式中提供的方法。其中,该计算机程序被设置为运行时执行上述任一项方法实施例中的步骤。
可选地,在本实施例中,上述计算机可读的存储介质可以被设置为存储用于执行以下步骤的计算机程序:
S1,获取对第一数据结构执行序列化操作得到的目标字节流,其中,所述第一数据结构包括第一字段集合,所述第一字段集合中的每个字段包括具有对应关系的字段类型、字段名称以及字段取值;
S2,根据所述目标字节流,确定所述第一数据结构的目标格式信息,其中,所述目标格式信息包括所述每个字段的字段标识、所述每个字段中的字段类型、以及所述目标字节流中与所述每个字段中的字段取值对应的字符串;
S3,根据所述目标格式信息,生成目标中间文件,其中,所述目标中间文件中包括第二字段集合,所述第二字段集合中的每个字段包括具有对应关系的字段类型、字段名称以及字段标识,所述第一字段集合中的字段类型与所述第二字段集合中的字段类型相同,所述第一字段集合中的字段名称与所述第二字段集合中的字段名称至少部分相同;
S4,根据所述目标中间文件,对所述目标字节流执行反序列化操作,得到重构的第二数据结构,其中,所述第二数据结构包括第三字段集合,所述第三字段集合中的每个字段包括具有对应关系的字段类型、字段名称以及字段取值,所述第二字段集合中的字段类型和字段名称与所述第三字段集合中的字段类型和字段名称相同,所述第一字段集合中的字段取值与所述第三字段集合中的字段取值相同。
可选地,在本实施例中,本领域普通技术人员可以理解上述实施例的各种方法中的全部或部分步骤是可以通过程序来指令终端设备相关的硬件来完成,该程序可以存储于一计算机可读存储介质中,存储介质可以包括:闪存盘、只读存储器(Read-Only Memory,ROM)、随机存取器(Random Access Memory,RAM)、磁盘或光盘等。
上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
上述实施例中的集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在上述计算机可读取的存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在存储介质中,包括若干指令用以使得一台或多台计算机设备(可为个人计算机、服务器或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。
在本发明的上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。
在本申请所提供的几个实施例中,应该理解到,所揭露的客户端,可通过其它的方式实现。其中,以上所描述的装置实施例仅仅是示意性的,例如所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,单元或模块的间接耦合或通信连接,可以是电性或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。

Claims (14)

1.一种信息重构方法,其特征在于,包括:
获取对第一数据结构执行序列化操作得到的目标字节流,其中,所述第一数据结构包括第一字段集合,所述第一字段集合中的每个字段包括具有对应关系的字段类型、字段名称以及字段取值;
根据所述目标字节流,确定所述第一数据结构的目标格式信息,其中,所述目标格式信息包括所述每个字段的字段标识、所述每个字段中的字段类型、以及所述目标字节流中与所述每个字段中的字段取值对应的字符串;
根据所述目标格式信息,生成目标中间文件,其中,所述目标中间文件中包括第二字段集合,所述第二字段集合中的每个字段包括具有对应关系的字段类型、字段名称以及字段标识,所述第一字段集合中的字段类型与所述第二字段集合中的字段类型相同,所述第一字段集合中的字段名称与所述第二字段集合中的字段名称至少部分相同;
根据所述目标中间文件,对所述目标字节流执行反序列化操作,得到重构的第二数据结构,其中,所述第二数据结构包括第三字段集合,所述第三字段集合中的每个字段包括具有对应关系的字段类型、字段名称以及字段取值,所述第二字段集合中的字段类型和字段名称与所述第三字段集合中的字段类型和字段名称相同,所述第一字段集合中的字段取值与所述第三字段集合中的字段取值相同。
2.根据权利要求1所述的方法,其特征在于,所述根据所述目标字节流,确定所述第一数据结构的目标格式信息,包括:
根据所述目标字节流中的第一字节,确定所述第一字段集合中的目标字段中的字段类型和字段标识,其中,所述第一字节用于指示所述目标字段中的字段类型和字段标识;
根据所述第一字节指示的所述字段类型以及所述目标字节流中的第二字节,确定所述目标字节流中与所述目标字段中的字段取值对应的字符串,其中,所述第二字节用于指示与所述目标字段中的字段取值对应的字符串。
3.根据权利要求2所述的方法,其特征在于,所述根据所述目标字节流中的第一字节,确定所述第一字段集合中的目标字段中的字段类型和字段标识,包括:
在所述第一字节的取值等于对第一字段标识取值与第一类型标识取值进行或运算所得到的取值、且所述第一字段标识取值是将第二字段标识取值左移预设位数所得到的取值的情况下,将所述目标字段中的字段类型确定为所述第一类型标识所表示的第一字段类型,并将所述目标字段中的字段标识的取值确定为所述第二字段标识取值。
4.根据权利要求2所述的方法,其特征在于,所述根据所述第一字节指示的所述字段类型以及所述目标字节流中的第二字节,确定所述目标字节流中与所述目标字段中的字段取值对应的字符串,包括:
在所述第一字节指示的所述字段类型对应于第一存储方式、且所述第一存储方式所表示的字段长度为所述第二字节的取值时,从所述第二字节之后的字节开始截取长度为所述第二字节的取值的字符串,得到所述与所述目标字段中的字段取值对应的字符串,其中,所述第一存储方式是所述目标字段的存储方式,所述第一存储方式用于表示依次存储的是所述目标字段中的字段类型、所述目标字段中的字段取值对应的字段长度、以及所述目标字段中的字段取值。
5.根据权利要求2所述的方法,其特征在于,所述根据所述第一字节指示的所述字段类型以及所述目标字节流中的第二字节,确定所述目标字节流中与所述目标字段中的字段取值对应的字符串,包括:
在所述第一字节指示的所述字段类型对应于第二存储方式、且所述第二存储方式所表示的字段取值为所述第二字节的取值时,将所述第二字节确定为所述与所述目标字段中的字段取值对应的字符串,其中,所述第二存储方式是所述目标字段的存储方式,所述第二存储方式用于表示依次存储的是所述目标字段中的字段类型、以及所述目标字段中的字段取值。
6.根据权利要求1所述的方法,其特征在于,所述根据所述目标格式信息,生成目标中间文件,包括:
根据所述与所述每个字段中的字段取值对应的字符串,确定所述每个字段中的字段取值;
根据所述每个字段中的字段取值所对应的语义类型,确定所述每个字段中的字段名称;
根据所述目标格式信息中的所述每个字段的字段标识、所述每个字段中的字段类型、以及确定的所述每个字段中的字段名称,生成所述目标中间文件。
7.根据权利要求6所述的方法,其特征在于,所述根据所述每个字段中的字段取值所对应的语义类型,确定所述每个字段中的字段名称,包括:
在目标字段中的字段取值对应于预设的语义类型集合中的目标语义类型时,将所述目标字段中的字段名称确定为所述目标语义类型;
在目标字段中的字段取值与所述语义类型集合中的语义类型都不对应时,将所述目标字段中的字段名称确定为预设的未知字段名称。
8.根据权利要求6所述的方法,其特征在于,所述根据所述目标格式信息中的所述每个字段的字段标识、所述每个字段中的字段类型、以及确定的所述每个字段中的字段名称,生成所述目标中间文件,包括:
将所述目标中间文件中的目标字段中的字段类型确定为等于所述目标格式信息中的所述目标字段中的字段类型;
将所述目标中间文件中的所述目标字段中的字段名称确定为等于预先确定的字段名称,其中,所述预先确定的字段名称是根据所述目标字段中的字段取值所对应的语义类型确定出的字段名称;
将所述目标中间文件中的所述目标字段的字段标识确定为等于所述目标格式信息中的所述目标字段的字段标识。
9.根据权利要求1所述的方法,其特征在于,所述根据所述目标中间文件,对所述目标字节流执行反序列化操作,得到重构的第二数据结构,包括:
根据所述目标字节流中的第一字节,确定所述第一字段集合中的目标字段中的字段类型和字段标识,其中,所述第一字节用于指示所述目标字段中的字段类型和字段标识;
根据所述第一字节指示的所述字段类型以及所述目标字节流中的第二字节,确定所述目标字节流中与所述目标字段中的字段取值对应的字符串,其中,所述第二字节用于指示与所述目标字段中的字段取值对应的字符串;
根据所述与所述目标字段中的字段取值对应的字符串,确定所述目标字段中的字段取值;
在所述目标中间文件中查找与所述目标字段中的字段标识对应的字段;
将确定出的所述目标字段中的字段取值赋值给查找到的字段中的字段名称,得到所述第二数据结构中的所述目标字段。
10.根据权利要求1至9中任一项所述的方法,其特征在于,在所述获取对第一数据结构执行序列化操作得到的目标字节流之前,所述方法还包括:
从第一应用中获取所述第一数据结构,其中,所述第一数据结构是所述第一应用产生的数据结构或者是所述第一应用接收的数据结构;
对所述第一数据结构执行所述序列化操作,得到所述目标字节流。
11.根据权利要求10所述的方法,其特征在于,在根据所述目标中间文件,对所述目标字节流执行反序列化操作,得到重构的第二数据结构之后,所述方法还包括:
将所述第二数据结构发送给第二应用,其中,所述第二应用用于对所述第二数据结构进行显示或者进行目标处理操作。
12.一种信息重构装置,其特征在于,包括:
获取模块,用于获取对第一数据结构执行序列化操作得到的目标字节流,其中,所述第一数据结构包括第一字段集合,所述第一字段集合中的每个字段包括具有对应关系的字段类型、字段名称以及字段取值;
确定模块,用于根据所述目标字节流,确定所述第一数据结构的目标格式信息,其中,所述目标格式信息包括所述每个字段的字段标识、所述每个字段中的字段类型、以及所述目标字节流中与所述每个字段中的字段取值对应的字符串;
生成模块,用于根据所述目标格式信息,生成目标中间文件,其中,所述目标中间文件中包括第二字段集合,所述第二字段集合中的每个字段包括具有对应关系的字段类型、字段名称以及字段标识,所述第一字段集合中的字段类型与所述第二字段集合中的字段类型相同,所述第一字段集合中的字段名称与所述第二字段集合中的字段名称至少部分相同;
执行模块,用于根据所述目标中间文件,对所述目标字节流执行反序列化操作,得到重构的第二数据结构,其中,所述第二数据结构包括第三字段集合,所述第三字段集合中的每个字段包括具有对应关系的字段类型、字段名称以及字段取值,所述第二字段集合中的字段类型和字段名称与所述第三字段集合中的字段类型和字段名称相同,所述第一字段集合中的字段取值与所述第三字段集合中的字段取值相同。
13.一种计算机可读的存储介质,所述计算机可读的存储介质包括存储的程序,其中,所述程序运行时执行所述权利要求1至11任一项中所述的方法。
14.一种电子设备,包括存储器和处理器,其特征在于,所述存储器中存储有计算机程序,所述处理器被设置为通过所述计算机程序执行所述权利要求1至11任一项中所述的方法。
CN202110626928.0A 2021-06-04 2021-06-04 信息重构方法和装置、存储介质及电子设备 Active CN113204683B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202110626928.0A CN113204683B (zh) 2021-06-04 2021-06-04 信息重构方法和装置、存储介质及电子设备

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202110626928.0A CN113204683B (zh) 2021-06-04 2021-06-04 信息重构方法和装置、存储介质及电子设备

Publications (2)

Publication Number Publication Date
CN113204683A CN113204683A (zh) 2021-08-03
CN113204683B true CN113204683B (zh) 2022-07-01

Family

ID=77024013

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202110626928.0A Active CN113204683B (zh) 2021-06-04 2021-06-04 信息重构方法和装置、存储介质及电子设备

Country Status (1)

Country Link
CN (1) CN113204683B (zh)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113791769A (zh) * 2021-09-23 2021-12-14 上海淇玥信息技术有限公司 一种复杂结构的数据取值方法、装置和电子设备

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109308224A (zh) * 2017-07-27 2019-02-05 阿里巴巴集团控股有限公司 跨平台数据通信、跨平台数据处理的方法、装置及系统
CN111176976A (zh) * 2019-08-05 2020-05-19 腾讯科技(深圳)有限公司 测试数据的生成方法和装置、存储介质及电子装置
CN112783974A (zh) * 2020-12-31 2021-05-11 杭州趣链科技有限公司 数据转换方法、装置、设备和存储介质

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104077335B (zh) * 2013-05-07 2017-05-03 腾讯科技(深圳)有限公司 一种结构化数据的序列化、反序列化方法、装置和系统
CN110597500B (zh) * 2019-07-26 2023-04-18 北京柠檬微趣科技股份有限公司 消息结构的序列化和反序列化方法及装置

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109308224A (zh) * 2017-07-27 2019-02-05 阿里巴巴集团控股有限公司 跨平台数据通信、跨平台数据处理的方法、装置及系统
CN111176976A (zh) * 2019-08-05 2020-05-19 腾讯科技(深圳)有限公司 测试数据的生成方法和装置、存储介质及电子装置
CN112783974A (zh) * 2020-12-31 2021-05-11 杭州趣链科技有限公司 数据转换方法、装置、设备和存储介质

Also Published As

Publication number Publication date
CN113204683A (zh) 2021-08-03

Similar Documents

Publication Publication Date Title
JP4456554B2 (ja) データ圧縮方法及び圧縮データ送信方法
CN109951435B (zh) 一种设备标识提供方法及装置和风险控制方法及装置
CN111683066B (zh) 异构系统集成方法、装置、计算机设备和存储介质
US20050027731A1 (en) Compression dictionaries
CN108733317B (zh) 数据存储方法和装置
CN114731162A (zh) 压缩数据的部分下载
CN108092956B (zh) 一种获取压缩字典的方法和装置
CN106534268B (zh) 一种数据共享方法及装置
CN113010378B (zh) 微服务模块的日志处理方法及装置、存储介质、电子装置
CN101510898A (zh) 一种数据下载和上传的实现方法、网络节点及通信系统
CN113204683B (zh) 信息重构方法和装置、存储介质及电子设备
CN110727417A (zh) 一种数据处理方法和装置
CN109698814B (zh) 僵尸网络发现方法及僵尸网络发现装置
CN110334103B (zh) 推荐服务的更新方法、提供装置、访问装置和推荐系统
WO2022179353A1 (zh) 域名解析方法、装置及计算机设备
CN108287859B (zh) 一种多媒体信息检索方法及装置
CN108460044B (zh) 数据的处理方法和装置
US20200401695A1 (en) Determining a state of a network
CN109617708B (zh) 一种埋点日志的压缩方法、设备及系统
CN102932474B (zh) 报文解析方法、设备及系统
CN114039801B (zh) 一种短链接生成方法、解析方法和系统、设备、存储介质
CN114116544B (zh) 插槽信息的获取方法、装置、设备及存储介质
CN115276889A (zh) 解码处理方法、装置、计算机设备及存储介质
CN112988176A (zh) 渠道包的生成方法和装置、存储介质及电子设备
JP4456574B2 (ja) 圧縮データ送信方法

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