CN114564509A - 序列化方法、反序列化方法、设备、芯片以及介质 - Google Patents
序列化方法、反序列化方法、设备、芯片以及介质 Download PDFInfo
- Publication number
- CN114564509A CN114564509A CN202011364246.9A CN202011364246A CN114564509A CN 114564509 A CN114564509 A CN 114564509A CN 202011364246 A CN202011364246 A CN 202011364246A CN 114564509 A CN114564509 A CN 114564509A
- Authority
- CN
- China
- Prior art keywords
- data
- node
- data item
- memory area
- linked list
- 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.)
- Pending
Links
Images
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/2458—Special types of queries, e.g. statistical queries, fuzzy queries or distributed queries
- G06F16/2474—Sequence data queries, e.g. querying versioned data
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/76—Architectures of general purpose stored program computers
- G06F15/78—Architectures of general purpose stored program computers comprising a single central processing unit
- G06F15/7807—System on chip, i.e. computer system on a single chip; System in package, i.e. computer system on one or more chips in a single package
-
- 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/22—Indexing; Data structures therefor; Storage structures
- G06F16/2282—Tablespace storage structures; Management thereof
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Computer Hardware Design (AREA)
- General Physics & Mathematics (AREA)
- Databases & Information Systems (AREA)
- Data Mining & Analysis (AREA)
- Software Systems (AREA)
- Computational Linguistics (AREA)
- Probability & Statistics with Applications (AREA)
- Mathematical Physics (AREA)
- Fuzzy Systems (AREA)
- Computing Systems (AREA)
- Microelectronics & Electronic Packaging (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
提供了一种提供了一种序列化方法、反序列化方法、设备、芯片以及介质,所述方法包括:获取待序列化的数据结构,所述数据结构包括至少一个数据项;获取所述数据结构对应的第一级单链表;将所述第一级单链表和所述数据结构的数据分别存储至所述第一内存区和所述第二内存区。在序列化过程中,能够提升序列化效率或速度,并且,在反序列化过程中,能够控制序列化数据的代码尺寸(code size),并降低对内存的占有量或需求,适用于SRAM尤为宝贵的SOC平台。
Description
技术领域
本申请实施例涉及通信领域,并且更具体地,涉及序列化方法、反序列化方法、设备、芯片以及介质。
背景技术
截止目前,数据序列化的存储工具主要是谷歌(google)发布的一款跨平台序列化框架,即扁平存储(flatbuffer)。FlatBuffer能够把数据层级结构保存在一个扁平化的二进制缓存中,同时能够保持直接获取里面的结构化数据,而不需要解析,并且还能保证数据结构变化的前后向兼容。其可跨平台的特性被广大软件开发人员广为使用。
但是,由于其代码的通用特性,及结构的复杂性导致其代码尺寸(code size)相对较大,例如,flatbuffer的动态(runtime)库代码尺寸(code size)为170K左右,而通常片上系统(System On Chip,SOC)平台的静态随机存储器(Static Random Access Memory,SRAM)只有几十到几百K的空间,除去操作系统(Operating System,OS)以及驱动(Driver)之外,留给其它功能的内存空间不会很多,因此,SOC平台不能满足flatbuffer对内存的需求。此外,基于flatbuffer对数据序列化之后,相对原始数据的尺寸(SIZE)会增大很多,例如,一块70K左右的二进制数据,在利用flatbuffer序列化之后,其尺寸增长为了将近700K。
因此,针对SRAM尤为宝贵的SOC平台,急需一种数据序列化以及数据反序列化的方法。
发明内容
提供了一种序列化方法、反序列化方法、设备、芯片以及介质,在序列化过程中,能够提升序列化效率或速度,并且,在反序列化过程中,能够控制序列化数据的代码尺寸(code size),并降低对内存的占有量或需求,特别适用于SRAM尤为宝贵的SOC平台。
第一方面,提供了一种序列化方法,包括:
获取待序列化的数据结构,所述数据结构包括至少一个数据项;
获取所述数据结构对应的第一级单链表;所述第一级单链表包括第一节点,所述第一节点用于表征所述至少一个数据项中的第一数据项的数据的存储信息,或所述第一节点用于表征所述第一数据项对应的次级单链表的存储信息;
将所述第一级单链表和所述数据结构的数据分别存储至所述第一内存区和所述第二内存区。
第二方面,提供了一种反序列化方法,包括:
获取序列化数据;
将所述序列化数据中的第一级单链表和至少一个数据项的数据分别映射至第三内存区和第四内存区;所述第一级单链表包括第一节点,所述第一节点用于表征所述至少一个数据项中的第一数据项的数据的存储信息,或所述第一节点用于表征所述第一数据项对应的次级单链表的存储信息;
基于所述第一级单链表中的节点,获取所述至少一个数据项的数据,以得到数据结构。
第三方面,提供了一种装置,用于执行上述第一方面或其各实现方式中的方法。具体地,所述装置包括用于执行上述第一方面或其各实现方式中的方法的功能模块。
第四方面,提供了一种装置,用于执行上述第二方面或其各实现方式中的方法。具体地,所述装置包括用于执行上述第二方面或其各实现方式中的方法的功能模块。
第五方面,提供了一种通信设备,包括处理器和存储器。所述存储器用于存储计算机程序,所述处理器用于调用并运行所述存储器中存储的计算机程序,以执行上述第一方面或其各实现方式中的方法。
第六方面,提供了一种通信设备,包括处理器和存储器。所述存储器用于存储计算机程序,所述处理器用于调用并运行所述存储器中存储的计算机程序,以执行上述第二方面或其各实现方式中的方法。
第七方面,提供了一种芯片,用于实现上述第一方面至第二方面中的任一方面或其各实现方式中的方法。具体地,所述芯片包括:处理器,用于从存储器中调用并运行计算机程序,使得安装有所述芯片的设备执行如上述第一方面至第二方面中的任一方面或其各实现方式中的方法。
第八方面,提供了一种计算机可读存储介质,用于存储计算机程序,所述计算机程序使得计算机执行上述第一方面至第二方面中的任一方面或其各实现方式中的方法。
基于以上技术方案,通过所述第一级单链表中的第一节点表征所述至少一个数据项中的第一数据项的数据的存储信息或所述第一数据项对应的次级单链表的存储信息,一方面能够整体存储所述至少一个数据项的数据的存储信息,进而能够提升序列化效率或速度,另一方面,在反序列化过程中,通过所述第一级单链表,能够简化所述至少一个数据项的数据的存储信息的设计,相应的,能够控制序列化数据的代码尺寸(code size),并降低对内存的占有量或需求,特别适用于SRAM尤为宝贵的SOC平台。
例如,在反序列化过程中,可以降低反序列工具对内存的需求,例如仅需5K左右的内存。
附图说明
图1是本申请实施例提供的序列化系统框架的示意性框图。
图2是本申请实施例提供的反序列化系统框架的示意性框图。
图3是本申请实施例的序列化方法的示意性流程图。
图4是本申请实施例的节点和数据之间的关系的示意性结构图。
图5是本申请实施例提供的反序列化方法的示意性流程图。
图6是本申请实施例提供的序列化和反序列化的示意性流程图。
图7和图8是本申请实施例提供的装置的示意性框图。
图9是本申请实施例提供的通信设备的示意性框图。
图10是本申请实施例提供的芯片的示意性框图。
具体实施方式
下面将结合附图,对本申请实施例中的技术方案进行描述。
互联网的产生带来了机器间通讯的需求,而互联通讯的双方需要采用约定的协议,序列化和反序列化属于通讯协议的一部分。通讯协议可以采用分层模型,不同模型的层的功能定义以及颗粒度可以不同。例如,TCP/IP协议是一个四层协议,而OSI模型却是七层协议模型。在OSI七层协议模型中展现层(Presentation Layer)的主要功能是把应用层的数据结构转换成一段连续的二进制串,或者反过来,把二进制串转换成应用层的数据结构。展现层的功能就是序列化和反序列化。
TCP/IP协议的应用层可以对应OSI七层协议模型的应用层,展示层和会话层,换言之,序列化和反序列化也可以理解为TCP/IP协议的应用层的一部分功能。
序列化可以指将数据结构转换成二进制串的过程。序列化所生成的二进制串指的是存储在内存中的一块数据。需要说明的是,本申请中数据结构和对象可以互换使用。此外,字符串(String)是Java的一等公民,是一种特殊对象(Object),即也是一种数据结构。对于跨语言间的通讯,序列化后的数据不能是某种语言的特殊数据类型。二进制串在Java里面所指的是字节(byte)。此外,序列化的行为可能发生在数据传递过程中的任何阶段,例如网络传输,不同进程间数据传递,不同类之间的参数传递,把数据存储到磁盘上等等。
反序列化可以指将在序列化过程中所生成的二进制串转换成数据结构的过程。
序列化需要在原有的数据上加上描述字段或域,以便反序列化解析。
需要说明的是,数据的序列化过程发生在笔记本电脑(laptop)/台式机(desktop)等上,这个过程是不需要介意序列化工具对内存的消耗。而数据的反序列化阶段会发生在SOC内部,即将之前主机平台序列化的数据解析出来为自己所用,所以这个过程会比较注重反序列化工具对内存(memory)的消耗情况。
如果序列化过程引入的额外开销过高,可能会导致过大的网络,磁盘等各方面的压力。对于海量分布式存储系统,数据量往往以TB为单位,巨大的的额外空间开销意味着高昂的成本。
本申请提供了一种能够降低内存消耗的序列化方法和反序列化方法。
图1是本申请实施例提供的序列化系统框架110的示意性框图。
如图1所示,所述序列化系统框架110可包括解析模块111、单链表建立模块112、数据保存模块113以及内存管理模块114。
所述序列化系统框架110可以是各种类型的具有计算功能的设备。例如,所述系统框架110可以是个人计算机(Personal Computer,PC),即所述系统框架110可以是一种大小、价格和性能适用于个人使用的多用途计算机。例如,所述个人计算机可以是笔记本电脑(laptop)、台式机(desktop)、小型笔记本电脑和平板电脑以及超级本等等。例如,所述序列化系统框架110可以是分布式系统客户端。
解析模块111用于接收应用层的数据,并对所述应用层的数据进行解析,以生成数据结构(struct)。
换言之,所述解析模块111输出的数据结构可作为本申请提供的序列化方法的输入数据。所述数据结构可用于单链表建立模块112和数据保存模块113使用。
单链表建立模块112可用于基于所述解析模块111输出的数据结构输出用于表征所述数据结构的数据的存储信息的索引节点。
数据保存模块113可用于存储所述索引节点和所述数据结构的数据。
需要说明的是,所述数据结构的数据可以是任意数据类型,且存储所述数据结构的数据时需要满足内存对齐原则。例如,字符串数据可以是1字节对齐。再如,int整型数据、结构体型数据需要基于预设数量的字节对齐。例如,所述预设数量的字节包括4字节或8字节。
内存管理模块114可用于负责对为所述索引节点和所述数据结构的数据分配或申请内存。例如为单链表建立模块112和数据保存模块113分别申请内存。例如,内存管理模块114可用于负责分配或申请两块内存。其中所述两块内存中的一块内存可用于存储所述索引节点,所述两块内存中的另一块内存可用以连续存放数据。
例如,所述内存管理模块114可用于预先分配一块大的连续内存,供后续连续存放索引节点和数据结构的数据。需要说明的是,所述内存管理模块114可为单链表建立模块112申请或分配零散的内存也可以是连续的内存。若为连续的内存,便于将所述数据结构序列化,此外,还有利于保存以及恢复所述数据结构。
此外,所述内存管理模块114可用于将所述数据结构的数据和所述索引节点保存为序列化数据,所述序列化数据也可称为二进制(Binary)文件。
图2是本申请实施例提供的反序列化系统框架120的示意性框图。
如图2所示,所述反序列化系统框架120可包括内存映射模块121、解析模块122以及数据访问模块123。
所述反序列化系统框架120可以是称为芯片级系统,所述芯片级系统也可称为片上系统(System On Chip,SOC),所述芯片级系统可以是一个产品,或一个有专用目标的集成电路,所述产品或集成电路包含完整系统并有嵌入软件的全部内容。例如,所述系统芯片可以是NPU AI芯片。
所述内存映射模块121可将所述序列化系统框架110输出的序列化数据整体映射到芯片级系统(System On Chip,SOC)内部的存储器。例如,所述内存映射模块121可将所述序列化系统框架110输出的序列化数据整体映射到SOC的双倍数据速率同步动态随机存取存储器(Double Data Rate SDRAM,DDR SDRAM)上,所述DDR SDRAM的空间相对静态随机存取存储器(static RAM,SRAM)会大出很多,以保证所述SOC具有足够的容量,以映射所述数据结构。
所述解析模块122可用于解析所述序列化数据,以得到所述数据结构的索引节点。例如,所述解析模块122可基于对索引节点的定义,恢复每一个索引节点,进而恢复单链表中的所有节点的信息。
所述数据访问模块123可基于所述解析模块122获取的索引节点以及对索引节点的定义解析或访问所述结构的数据,以完成序列化数据的反序列化。
需要说明的是,序列化系统框架110和反序列化系统框架120之间可以进行通信。例如,序列化系统框架110输出的序列化数据可通过底层的传输层、网络层、链路层以及物理层协议转换成数字信号在互联网中传递给反序列化系统框架120。
图3示出了根据本申请实施例的序列化方法200的示意性流程图,所述方法200可以由序列化装置执行。例如,图1所示的序列化系统框架110。
如图3所示,所述方法200可包括以下部分或全部内容:
S210,获取待序列化的数据结构,所述数据结构包括至少一个数据项;
S220,获取所述数据结构对应的第一级单链表;所述第一级单链表包括第一节点,所述第一节点用于表征所述至少一个数据项中的第一数据项的数据的存储信息,或所述第一节点用于表征所述第一数据项对应的次级单链表的存储信息;
S230,将所述第一级单链表和所述数据结构的数据分别存储至所述第一内存区和所述第二内存区。
需要说明的是,所述第一节点可以是用于表征所述第一数据项的数据的索引节点。换言之,所述第一内存区可以成为索引区,所述第二内存区也可称为数据区。可选的,所述第一内存区和所述第二内存区为连续的内存区。可选的,所述第一内存区位于所述第二内存区之前。
通过所述第一级单链表中的第一节点表征所述至少一个数据项中的第一数据项的数据的存储信息或所述第一数据项对应的次级单链表的存储信息,一方面能够整体存储所述至少一个数据项的数据的存储信息,进而能够提升序列化效率或速度,另一方面,在反序列化过程中,通过所述第一级单链表,能够简化所述至少一个数据项的数据的存储信息的设计,相应的,能够控制序列化数据的代码尺寸(code size),并降低对内存的占有量或需求,特别适用于SRAM尤为宝贵的SOC平台。
例如,在反序列化过程中,可以降低反序列工具对内存的需求,例如仅需5K左右的内存。
需要说明的是,本申请实施例中,所述至少一个数据项中的每一个数据项中可包括数据项的数据和所述数据项的数据的描述信息。每一个节点可以作为数据项的索引节点,以表征数据项的数据的存储信息。
例如,所述数据结构可以是各种模型(Schema)数据或模型文件。例如,所述数据结构可以是通过接口描述语言(Interface description language,IDL)生成IDL文件。应理解,参与通讯的各方需要对通讯的内容需要做相关的约定(Specifications),为了建立一个与语言和平台无关的约定,该约定可采用与具体开发语言、平台无关的语言来进行描述。这种语言可称为接口描述语言(Interface description language,IDL),采用IDL撰写的数据结构即可称之为IDL文件。
例如,所述数据结构可以是JSON数据。
JSON数据是采用JavaScript对象表示法(JavaScript Object Notation,JSON)表示的数据。
例如,可以基于“名称/值”对的集合(A collection of name/value pairs)和/或值的有序列表(An ordered list of values)描述数据。在其他可替代实施例中,所述“名称/值”对的集合也可被理解或称为为对象(object),记录(record),结构(struct),字典(dictionary),哈希表(hash table),有键列表(keyed list),或关联数组(associativearray)。值的有序列表也可被理解或称为为数组(array)。
下面以适用于网络处理单元(Network Processing Unit,NPU)人工智能(artificial intelligence,AI)芯片的JSON数据为例对本申请的数据结构进行说明。
其中,AI可以是一种研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的一门新的技术科学。
例如,所述数据结构可以是以下结构:
{“models”:[
{“field”:“magic”,“fieldValue”:{“value”:“xxxx”,“type”:“immediate”},“fieldType”:“char”},
{“field”:“version”,“fieldValue”:{“value”:“0.1”,“type”:“immediate”},“fieldType”:“char”},
{“field”:“model1”,“fieldValue”:{“model1”:“0.1”,“type”:“pointer”},“fieldType”:“table”},
{“field”:“model2”,“fieldValue”:{“model2”:“0.1”,“type”:“pointer”},“fieldType”:“table”},
]
}
其中,model表示一个数据结构。例如,models表示包括子数据结构的数据结构,model1和model2分别表示一个子数据结构。例如,所述数据结构用于描述一个AI模型,其进一步可包含一个或多个AI模型。
以model1为例,所述model1子数据结构可以是以下结构:
{“model1”:[
{“field”:“name”,“fieldValue”:{“value”:“xxxx”,“type”:“immediate”},“fieldType”:“char”},
{“field”:“add_size”,“fieldValue”:{“value”:“1234”,“type”:“immediate”},“fieldType”:“uint”},
{“field”:“vector<xxx>”,“fieldValue”:{“value”:“c://file path1”,“type”:“path”},“fieldType”:“structure1”},
{“field”:“vector<xxx>”,“fieldValue”:{“value”:“c://file path2”,“type”:“path”},“fieldType”:“unit”},
]
}
下面对上述数据结构或子数据结构中的“名称/值”对的集合进行说明。
需要说明的是,所述数据结构和子数据结构中的每一个数据项可以为[]中包括的“名称/值”对的集合。
field用于描述数据项的功能;例如,field的值可以是功能(magic)、版本(version)、子数据结构(model1或mode2)、地址(add_size)或变量xxx(vector<xxx>)。
fieldValue value用于描述数据项的数据。
fieldValue value的值可包括两个“名称/值”对的集合。一个“名称/值”对的集合的名称为数据(value),其赋值即是数据项的数据,或者,所述一个“名称/值”对的集合的名称可以为子数据结构的名称(例如model1或model2)。例如,value的值可以是字符串或整数等等。例如,“1234”或“c://file path”。进一步的,另一个“名称/值”对的集合的名称为类型(type),用于描述value描述的数据的使用方式。例如,所述type的值可以是立即数(immediate),表示数据项的数据是立即数。再如,所述type的值可以是子数据结构地址指示信息,用于描述数据项的数据是一个地址指示信息,用于指向子数据结构或子表格。再如,所述type的值可以是路径(path)地址指示信息,用于描述数据项的数据所属的文件的路径,即数据项的数据包含在此文件内。
fieldType用于描述field value的数据类别;例如,fieldType的值可以是字符串类型(char)或子表格(table);所述char表示field value的数据是字符串类型,所述table表示field value所表示的数据是一个子表格或子数据结构。
需要说明的是,本申请的实施例中,上文涉及的数据项的数据可以指“名称”为数据(value)的“名称/值”对的集合,在其他可替代实施例中,上文涉及的数据项的描述信息可以包括除“名称”为数据(value)的“名称/值”对的集合之外的“名称/值”对的集合。
此外,本申请中的单链表包括至少一个节点,所述至少一个节点中的每一个节点用于表征数据结构中的数据项的数据的存储信息。
换言之,可以通过各种描述信息定义所述至少一个节点中的每一个节点。
例如,可以是基于每一个数据项的描述信息定义所述至少一个节点中的每一个节点的描述信息。
在本申请的一些实施例中,在本申请的一些实施例中,所述第一级单链表包括所述至少一个数据项中每一个数据项对应的节点,所述第一级单链表中除最后一个节点之外的所述第一节点还用于表征与所述第一节点相邻的下一个节点的存储信息。
例如,所述序列化系统框架110可以针对所述至少一个数据项中的一个数据项建立一个节点,并将针对所述第一数据项的下一个数据项建立的下一个节点插入或链接至所述第一节点。
在本申请的一些实施例中,所述第一节点包括下一个节点的节点地址指示信息,所述节点地址指示信息为:所述下一个节点在所述第一内存区的地址,相对所述第一级单链表中的第一个节点在所述第一内存区的地址的偏移量。
基于所述节点地址指示信息,可将所述至少一个数据项对应的所有节点关联起来,以形成一个单链表。
例如,所述节点地址指示信息可以是无符号整型(unsigned int)数据。
换言之,所述第一节点的描述信息可包括Node next参数,所述Node next参数可将所述第一节点关联至所述下一个节点。
当然,在其他可替代实施例中,所述节点地址指示信息也可以是所述下一个节点在所述第一内存区的实际地址。
在本申请的一些实施例中,所述第一节点包括数据地址指示信息,所述数据地址指示信息为:所述第一数据项的数据在所述第二内存区的地址,相对所述第一级单链表中的第一个节点在所述第一内存区的地址的偏移量。例如,所述第一数据项不包括子数据结构,且所述第一节点包括数据地址指示信息。
例如,所述数据地址指示信息可以是按照以下公式计算出的偏移值:
P1=P0–ADDR0 公式(1)。
其中,所述P1为存储的偏移值,所述P0为所述第一数据项的数据在所述第二内存区的实际地址,所述ADDR0为所述第一级单链表中的第一个节点在所述第一内存区的实际地址。
需要说明的是,所述ADDR0可以随所述第一内存区的实际分配情况确定。例如,所述ADDR0可以是所述第一内存区中的第一个字节的实际地址。
当然,在其他可替代实施例中,所述数据地址指示信息也可以是所述第一数据项的数据在所述第二内存区的实际地址。
在本申请的一些实施例中,所述第一级单链表包括所述至少一个数据项中第一数据项对应的第一节点,所述第一数据项包括子数据结构。
基于此,所述S240可包括:
获取所述子数据结构对应的次级单链表,所述链表地址指示信息为:所述次级单链表中的第一个次级节点在所述第一内存区的地址,相对所述第一级单链表中的第一个节点在所述第一内存区的地址的偏移量;将所述第一级单链表和所述次级单链表存储至所述第一内存区,并将所述至少一个数据项的数据和所述子数据结构中的子数据项的数据存储至所述第二内存区。
例如,所述链表地址指示信息可以是按照以下公式计算出的偏移值:
P3=P2–ADDR0 公式(2)。
其中,所述P3为存储的偏移值,所述P2为所述次级单链表中的第一个次级节点在所述第一内存区的地址,所述ADDR0为所述第一级单链表中的第一个节点在所述第一内存区的实际地址。
需要说明的是,所述ADDR0可以随所述第一内存区的实际分配情况确定。例如,所述ADDR0可以是所述第一内存区中的第一个字节的实际地址。
当然,在其他可替代实施例中,所述数据地址指示信息也可以是所述第一数据项的数据在所述第二内存区的实际地址。
针对上述数据地址指示信息或链表地址指示信息,可以将其理解为一个地址指示信息的不同属性。
例如,所述第一节点的描述信息可包括Node fieldptr参数,其可以是数据地址指示信息或链表地址指示信息。若数据结构中的fieldType的值为table,则其可作为链表地址指示信息,用于指向单链表的头部。若数据结构中的fieldType的值不是table,则可作为数据地址指示信息,用于指向其数据在数据区域的地址。
在本申请的一些实施例中,所述次级单链表位于所述第一级单链表之后,且所述次级单链表在所述第一内存区的存储位置和所述第一级单链表在所述第一内存区的存储位置连续。
在本申请的一些实施例中,所述第一级单链表中的节点所包括的信息的类型和所述次级单链表中的次级节点所包括的信息的类型相同。
在本申请的一些实施例中,所述第一节点还包括以下中的至少一项:
功能域,用于指示所述第一数据项的功能;
长度域,用于指示所述第一数据项的数据的长度;或
类型域,用于指示所述第一数据项的数据的类型。
例如,可以通过以下方式定义节点:
例如,所述功能域(Node field)可以包括所述数据结构中的名称可以为“field”的“名称/值”对的集合的值。
例如,所述长度域(Node fieldlen)可以是无符号整型(unsigned int)数据。
例如,所述类型域(Node fieldType)可以用于表征所述数据结构中的数据项的数据的类型,即可包括所述数据结构中的名称可以为“fieldType”的“名称/值”对的集合的值。例如,“unit”或“char”。
在本申请的一些实施例中,所述功能包括所述第一数据项的名称和/或所述第一数据项的数据的地址的长度。
换言之,所述功能域可包括所述数据结构中的名称可以为“name”或“ddr_size”的“名称/值”对的集合的值。
在本申请的一些实施例中,所述类型域用于指示所述第一数据项的数据为以下类型中的至少一项:
立即数,用于指示所述第一数据项的数据为最终数据;
路径地址指示信息,用于指示所述第一数据项的数据的类型为所述最终数据所在的文件的路径;或
子数据结构地址指示信息,用于指示所述第一数据项的数据的类型为指向一个子数据结构的地址指示信息。
换言之,所述类型域可以对应所述数据结构中的名称可以为“type”的“名称/值”对的集合的值。
在本申请的一些实施例中,所述立即数可指示的数据类型包括以下中的至少一项:
整数int类型、字符类型或浮点类型。
在本申请的一些实施例中,所述至少一个数据项的数据包括基于预设数量的字节对齐的int数据或结构体数据。
通过字节对齐所述数据结构中的数据,相当于,除了需要字节对齐的字节填充空字节,不需要存储额外的数据,基于此,能够降低所述序列化数据的内存空间。
在本申请的一些实施例中,所述第二内存区内,所述至少一个数据项的数据类型相同的数据的存储地址连续。
针对第二内存区内数据填充的空字节,有可能会浪费一小部分的内存空间,将数据类型相同的数据存放到一起,可以保证相同类型这一批数据始终是字节对齐的而不再需要空字节填充,进而可减少空字节占用的内存空间,由此,可提升内存空间的利用率。
在本申请的一些实施例中,所述数据结构为数据类型为数组的JS对象简谱JSON数据结构。
利用将所述数据结构构造为JSON数据结构,能够清晰化所述数据结构的数据,有助于基于所述数据结构的的描述信息定义单链表中的节点的描述信息,进而能够提升系统性能。
在本申请的一些实施例中,所述第一内存区和所述第二内存区连续,且所述第一内存区位于所述第二内存区之前,以便反序列化过程中优先建立出节点。
图4是本申请实施例提供的节点和数据的关系的示意性框图。下面结合图4对本申请实施例的单链表中的节点和数据结构的数据的关系进行是理性说明。
如图4所示,假设第一内存区中的第一级单链表可包括节点A、节点B、节点C、节点D、节点E直至最后一个空节点。
一方面,所述节点A关联至所述节点B,所述节点B关联至所述节点C,直至所述空节点的前一个节点关联至所述空节点,以形成所述第一级单链表。
另一方面,所述节点A、所述节点B以及所述节点C对应的数据项不包括子数据结构,则所述节点A、所述节点B以及所述节点C可分别关联至所述第二内存区中的存储的所述节点A、所述节点B以及所述节点C对应的数据项的数据。假设所述节点D、节点E分别包括子数据结构,则节点D、节点E分别关联至节点D、节点E分别对应的单链表。例如,节点D对应的单链表可包括次级节点D1、次级节点D2直至最后一个次级节点。例如,节点E对应的单链表可包括次级节点E1、次级节点E2直至最后一个次级节点。
此外,所有单链表的节点的数据结构完全一致,且4字节对齐。第二内存区存储的数据类型可以是不固定的,对于字符串数据可以存放在任意地址,对于整型数据可保证其开头地址4字节对齐。例如,在字符串之后紧跟整型数据的情况下,可以填充1-3个空字节。
以上结合附图详细描述了本申请的优选实施方式,但是,本申请并不限于上述实施方式中的具体细节,在本申请的技术构思范围内,可以对本申请的技术方案进行多种简单变型,这些简单变型均属于本申请的保护范围。例如,在上述具体实施方式中所描述的各个具体技术特征,在不矛盾的情况下,可以通过任何合适的方式进行组合,为了避免不必要的重复,本申请对各种可能的组合方式不再另行说明。又例如,本申请的各种不同的实施方式之间也可以进行任意组合,只要其不违背本申请的思想,其同样应当视为本申请所公开的内容。
应理解,本申请实施例中,术语“和/或”,仅仅是一种描述关联对象的关联关系,表示可以存在三种关系。具体地,A和/或B可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。另外,本文中字符“/”,一般表示前后关联对象是一种“或”的关系。
上文中结合图3至图4,从数据序列化装置的角度详细描述了根据本申请实施例的序列化方法,下面将结合图5至图6,从数据反序列化装置的角度描述根据本申请实施例的反序列化方法。
图5示出了根据本申请实施例的反序列化方法300的示意性流程图。所述方法300可以由如图2所示的反序列化系统框架120执行。应理解,方法300为序列化方法的逆过程,即方法300中的步骤可以参考序列化方法200中的相应步骤,为了简洁,在此不再赘述。
如图5所示,所述方法300可包括:
S310,获取序列化数据;
S320,将所述序列化数据中的第一级单链表和至少一个数据项的数据分别映射至第三内存区和第四内存区;所述第一级单链表包括第一节点,所述第一节点用于表征所述至少一个数据项中的第一数据项的数据的存储信息,或所述第一节点用于表征所述第一数据项对应的次级单链表的存储信息;
S330,基于所述第一级单链表中的节点,获取所述至少一个数据项的数据,以得到数据结构。
在反序列化过程中,通过所述第一级单链表,能够简化所述至少一个数据项的数据的存储信息的设计,相应的,能够控制序列化数据的代码尺寸(code size),并降低对内存的占有量或需求,特别适用于SRAM尤为宝贵的SOC平台。
例如,在反序列化过程中,可以降低反序列工具对内存的需求,例如仅需5K左右的内存。
在本申请的一些实施例中,所述第一级单链表包括所述至少一个数据项中每一个数据项对应的节点,所述第一级单链表中除最后一个节点之外的所述第一节点还用于表征与所述第一节点相邻的下一个节点的存储信息。
在本申请的一些实施例中,所述第一节点包括所述下一个节点的节点地址指示信息,所述节点地址指示信息为:所述下一个节点在所述第三内存区的地址,相对所述第一级单链表中的第一个节点在所述第三内存区的地址的偏移量;
所述方法300还可包括:
基于所述节点地址指示信息指示的偏移量和所述第一个节点在所述第三内存区的地址,确定所述下一个节点在所述第三内存区的地址。
在本申请的一些实施例中,所述第一节点包括数据地址指示信息,所述数据地址指示信息为:所述第一数据项的数据在所述第四内存区的地址,相对所述第一级单链表中的第一个节点在所述第三内存区的地址的偏移量;
所述方法300还可包括:
基于所述数据地址指示信息指示的偏移量和所述第一个节点在所述第三内存区的地址,确定所述第一数据项在所述第四内存区的地址。
在本申请的一些实施例中,所述第一级单链表包括第一节点,所述第一节点对应至所述至少一个数据项中第一数据项,所述第一节点包括链表地址指示信息,所述链表地址指示信息为:次级单链表中的第一个次级节点在所述第三内存区的地址,相对所述第一级单链表中的第一个节点在所述第三内存区的地址的偏移量;
其中,所述S330可包括:
获取所述次级单链表,所述次级单链表中的一个次级节点对应至所述子数据结构中的一个子数据项,所述一个次级节点用于表征所述一个子数据项的数据的存储信息;所述一个次级节点关联至所述子数据结构对应的次级节点中的与所述一个次级节点相邻的下一个次级节点;
基于所述次级单链表中的次级节点,获取所述子数据结构中的子数据项的数据,以得到所述数据结构。
在本申请的一些实施例中,所述次级单链表位于所述第一级单链表之后,且所述次级单链表在所述第三内存区的存储位置和所述第一级单链表在所述第三内存区的存储位置连续。
在本申请的一些实施例中,所述第一级单链表中的节点所包括的信息的类型和所述次级单链表中的次级节点所包括的信息的类型相同。
在本申请的一些实施例中,所述第一节点还包括以下中的至少一项:
功能域,用于指示所述第一数据项的功能;
长度域,用于指示所述第一数据项的数据的长度;或
类型域,用于指示所述第一数据项的数据的类型。
在本申请的一些实施例中,所述功能包括所述第一数据项的名称和/或所述第一数据项的数据的地址的长度。
在本申请的一些实施例中,所述类型域用于指示所述第一数据项的数据为以下类型中的至少一项:
立即数,用于指示所述第一数据项的数据为最终数据;
路径地址指示信息,用于指示所述第一数据项的数据的类型为所述最终数据所在的文件的路径;或
子数据结构地址指示信息,用于指示所述第一数据项的数据的类型为指向一个子数据结构的地址指示信息。
在本申请的一些实施例中,所述立即数可指示的数据类型包括以下中的至少一项:
整数int类型、字符类型或浮点类型。
在本申请的一些实施例中,所述至少一个数据项的数据包括基于预设数量的字节对齐的int数据或结构体数据。
在本申请的一些实施例中,所述第四内存区内,所述至少一个数据项的数据类型相同的数据的存储地址连续。
在本申请的一些实施例中,所述第三内存区和所述第四内存区连续,且所述第三内存区位于所述第四内存区之前。
需要说明的是,在反序列化过程中,所述第一节点中涉及地址指示信息的描述信息,需要基于地址指示信息指示的偏移值和映射完成时所述第三内存区的第一个节点的地址确定数据或节点的实际地址。
例如,可以基于以下公式确定实际地址:
P5=P4+ADDR1公式(3)。
其中,所述P5为数据或节点的实际地址,所述P4为地址指示信息指示的偏移值,所述ADDR1为映射完成时所述第三内存区的第一个节点的地址确定数据或节点的实际地址。
图6是本申请实施例提供的序列化方法和反序列化方法的示意性流程图。
如图6所示,,所述序列化过程S410可包括以下中的部分或全部内容:
S411,确定数据结构。
例如,电子设备从应用层获取数据0和数据1,以基于所述数据0和所述数据1确定所述数据结构。
S412,序列化装置解析所述数据结构。
S413,序列化装置数据结构解析是否结束?
S414,序列化装置获取第一内存区。
S415,序列化装置基于所述数据结构中的一个数据项赋值第一级单链表中的一个节点,并将所述一个节点存储至所述第一内存区。
S416,序列化装置获取第二内存区。
S417,序列化装置确定所述至少一个数据项中的数据是否对齐。
S418,序列化装置填充空数据。
S419,序列化装置将所述至少一个数据项的数据存储至所述第二内存区。
S420,序列化装置遍历所述数据结构中的数据项。
S421,序列化装置重新确定所述第一级单链表中节点的用于指示地址的地址指示信息的赋值。
例如,序列化装置将地址指示信息的赋值从绝对地址修改为相对地址。
如图6所示,所述反序列化过程S430可包括:
S431,反序列化装置下载序列化数据。
S432,反序列化装置将所述序列化数据中的第一级单链表和至少一个数据项的数据分别映射至第三内存区和第四内存区。
S433,反序列化装置解析所述第三内存区中的第一级单链表中的一个节点的赋值。
S434,反序列化装置解析所述第三内存区结束?
S435,反序列化装置解析下一个节点的赋值。
S436,反序列化装置重新确定所述第一级单链表中节点的用于指示地址的地址指示信息的赋值。
例如,反序列化装置将地址指示信息的赋值从相对地址修改为绝对地址。
S437,反序列化装置基于所述第一级单链表中的节点,获取所述至少一个数据项的数据,以得到数据结构。
需要说明的是,在本申请的各种方法实施例中,各过程的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本申请实施例的实施过程构成任何限定。
本申请实施例还提供了一种序列化方法,包括:
获取待序列化的数据结构,所述数据结构包括至少一个数据项;获取所述数据结构对应的第一级单链表,所述第一级单链表包括第二节点和第三节点,所述第二节点用于表征所述至少一个数据项中的第二数据项的数据的存储信息,所述第三节点用于表征所述至少一个数据项中的第三数据项对应的次级单链表的存储信息;将所述第一级单链表和所述至少一个数据项的数据分别存储至第一内存区和第二内存区。
本申请实施例还提供了一种反序列化方法,包括:
获取序列化数据;将所述序列化数据中的第一级单链表和至少一个数据项的数据分别映射至第三内存区和第四内存区;所述第一级单链表包括第二节点和第三节点,所述第二节点用于表征所述至少一个数据项中的第二数据项的数据的存储信息,所述第三节点用于表征所述至少一个数据项中的第三数据项对应的次级单链表的存储信息;基于所述第一级单链表中的节点,获取所述至少一个数据项的数据,以得到数据结构。
需要说明的是,上文中,若所述第一节点用于表征所述至少一个数据项中的第一数据项的数据的存储信息,则所述第一节点的功能可以等同于本申请实施例中的第二节点;若所述第一节点用于表征所述第一数据项对应的次级单链表的存储信息,则所述第一节点的功能可以等同于本申请实施例中的第三节点,相关内容可参考针对第一节点的描述,为避免重复,此处不再赘述。
上文结合图1至图6,详细描述了本申请的方法实施例,下文结合图7至图10,详细描述本申请的装置实施例。
图7是本申请实施例的装置500的示意性框图。
如图7所示,所述装置500可包括:
第一获取单元510,用于获取待序列化的数据结构,所述数据结构包括至少一个数据项;
第二获取单元520,用于获取所述数据结构对应的第一级单链表;,所述第一级单链表包括第一节点,所述第一节点用于表征所述至少一个数据项中的第一数据项的数据的存储信息,或所述第一节点用于表征所述第一数据项对应的次级单链表的存储信息;
存储单元530,用于将所述第一级单链表和所述数据结构的数据分别存储至所述第一内存区和所述第二内存区。
在本申请的一些实施例中,所述第一级单链表包括所述至少一个数据项中每一个数据项对应的节点,所述第一级单链表中除最后一个节点之外的所述第一节点还用于表征与所述第一节点相邻的下一个节点的存储信息。
在本申请的一些实施例中,所述第一节点包括所述下一个节点的节点地址指示信息,所述节点地址指示信息为:所述下一个节点在所述第一内存区的地址,相对所述第一级单链表中的第一个节点在所述第一内存区的地址的偏移量。
在本申请的一些实施例中,所述第一节点包括数据地址指示信息,所述数据地址指示信息为:所述第一数据项的数据在所述第二内存区的地址,相对所述第一级单链表中的第一个节点在所述第一内存区的地址的偏移量。
在本申请的一些实施例中,所述第一级单链表包括所述至少一个数据项中第一数据项对应的第一节点,所述第一数据项包括子数据结构;
其中,所述第二获取单元520还用于:
获取所述子数据结构对应的次级单链表,所述第一节点包括链表地址指示信息,所述链表地址指示信息为:所述次级单链表中的第一个次级节点在所述第一内存区的地址,相对所述第一级单链表中的第一个节点在所述第一内存区的地址的偏移量;所述存储单元540具体用于:
将所述第一级单链表和所述次级单链表存储至所述第一内存区,并将所述至少一个数据项的数据和所述子数据结构中的子数据项的数据存储至所述第二内存区。
在本申请的一些实施例中,所述次级单链表位于所述第一级单链表之后,且所述次级单链表在所述第一内存区的存储位置和所述第一级单链表在所述第一内存区的存储位置连续。
在本申请的一些实施例中,所述第一级单链表中的节点所包括的信息的类型和所述次级单链表中的次级节点所包括的信息的类型相同。
在本申请的一些实施例中,所述第一节点还包括以下中的至少一项:
功能域,用于指示所述第一数据项的功能;
长度域,用于指示所述第一数据项的数据的长度;或
类型域,用于指示所述第一数据项的数据的类型。
在本申请的一些实施例中,所述功能包括所述第一数据项的名称和/或所述第一数据项的数据的地址的长度。
在本申请的一些实施例中,所述类型域用于指示所述第一数据项的数据为以下类型中的至少一项:
立即数,用于指示所述第一数据项的数据为最终数据;
路径地址指示信息,用于指示所述第一数据项的数据的类型为所述最终数据所在的文件的路径;或
子数据结构地址指示信息,用于指示所述第一数据项的数据的类型为指向一个子数据结构的地址指示信息。
在本申请的一些实施例中,所述立即数可指示的数据类型包括以下中的至少一项:
整数int类型、字符类型或浮点类型。
在本申请的一些实施例中,所述至少一个数据项的数据包括基于预设数量的字节对齐的int数据或结构体数据。
在本申请的一些实施例中,所述第二内存区内,所述至少一个数据项的数据类型相同的数据的存储地址连续。
在本申请的一些实施例中,所述第一内存区和所述第二内存区连续,且所述第一内存区位于所述第二内存区之前。
应理解,装置实施例与方法实施例可以相互对应,类似的描述可以参照方法实施例。具体地,图7所示的装置500可以对应于执行本申请实施例的方法200或400中的相应主体,并且装置500中的各个单元的前述和其它操作和/或功能分别为了实现图3或图6中的各个方法中的相应流程,为了简洁,在此不再赘述。
图8是本申请实施例的装置600的示意性框图。
如图8所示,所述装置600可包括:
第一获取单元610,用于获取序列化数据;
映射单元620,用于将所述序列化数据中的第一级单链表和至少一个数据项的数据分别映射至第三内存区和第四内存区;所述第一级单链表包括第一节点,所述第一节点用于表征所述至少一个数据项中的第一数据项的数据的存储信息,或所述第一节点用于表征所述第一数据项对应的次级单链表的存储信息;
第二获取单元630,用于基于所述第一级单链表中的节点,获取所述至少一个数据项的数据,以得到数据结构。
在本申请的一些实施例中,所述第一级单链表包括所述至少一个数据项中每一个数据项对应的节点,所述第一级单链表中除最后一个节点之外的所述第一节点还用于表征与所述第一节点相邻的下一个节点的存储信息。
在本申请的一些实施例中,所述第一节点包括所述下一个节点的节点地址指示信息,所述节点地址指示信息为:所述下一个节点在所述第三内存区的地址,相对所述第一级单链表中的第一个节点在所述第三内存区的地址的偏移量;
所述第二获取单元630还用于:
基于所述节点地址指示信息指示的偏移量和所述第一个节点在所述第三内存区的地址,确定所述下一个节点在所述第三内存区的地址。
在本申请的一些实施例中,所述第一节点包括数据地址指示信息,所述数据地址指示信息为:所述第一数据项的数据在所述第四内存区的地址,相对所述第一级单链表中的第一个节点在所述第三内存区的地址的偏移量;
所述第二获取单元630还用于:
基于所述数据地址指示信息指示的偏移量和所述第一个节点在所述第三内存区的地址,确定所述第一数据项在所述第四内存区的地址。
在本申请的一些实施例中,所述第一节点包括链表地址指示信息,所述链表地址指示信息为:次级单链表中的第一个次级节点在所述第三内存区的地址,相对所述第一级单链表中的第一个节点在所述第三内存区的地址的偏移量;
其中,所述第二获取单元630具体用于:
获取所述次级单链表,所述次级单链表中的一个次级节点对应至所述子数据结构中的一个子数据项,所述一个次级节点用于表征所述一个子数据项的数据的存储信息;所述一个次级节点关联至所述子数据结构对应的次级节点中的与所述一个次级节点相邻的下一个次级节点;所述第二获取单元630具体用于:
基于所述次级单链表中的次级节点,获取所述子数据结构中的子数据项的数据,以得到所述数据结构。
在本申请的一些实施例中,所述次级单链表位于所述第一级单链表之后,且所述次级单链表在所述第三内存区的存储位置和所述第一级单链表在所述第三内存区的存储位置连续。
在本申请的一些实施例中,所述第一级单链表中的节点所包括的信息的类型和所述次级单链表中的次级节点所包括的信息的类型相同。
在本申请的一些实施例中,所述第一节点还包括以下中的至少一项:
功能域,用于指示所述第一数据项的功能;
长度域,用于指示所述第一数据项的数据的长度;或
类型域,用于指示所述第一数据项的数据的类型。
在本申请的一些实施例中,所述功能包括所述第一数据项的名称和/或所述第一数据项的数据的地址的长度。
在本申请的一些实施例中,所述类型域用于指示所述第一数据项的数据为以下类型中的至少一项:
立即数,用于指示所述第一数据项的数据为最终数据;
路径地址指示信息,用于指示所述第一数据项的数据的类型为所述最终数据所在的文件的路径;或
子数据结构地址指示信息,用于指示所述第一数据项的数据的类型为指向一个子数据结构的地址指示信息。
在本申请的一些实施例中,所述立即数可指示的数据类型包括以下中的至少一项:
整数int类型、字符类型或浮点类型。
在本申请的一些实施例中,所述至少一个数据项的数据包括基于预设数量的字节对齐的int数据或结构体数据。
在本申请的一些实施例中,所述第四内存区内,所述至少一个数据项的数据类型相同的数据的存储地址连续。
在本申请的一些实施例中,所述第三内存区和所述第四内存区连续,且所述第三内存区位于所述第四内存区之前。
应理解,装置实施例与方法实施例可以相互对应,类似的描述可以参照方法实施例。具体地,图8所示的装置600可以对应于执行本申请实施例的方法300或400中的相应主体,并且装置600中的各个单元的前述和其它操作和/或功能分别为了实现图5或图6中的各个方法中的相应流程,为了简洁,在此不再赘述。
上文中结合附图从功能模块的角度描述了本申请实施例的通信设备。应理解,该功能模块可以通过硬件形式实现,也可以通过软件形式的指令实现,还可以通过硬件和软件模块组合实现。
具体地,本申请实施例中的方法实施例的各步骤可以通过处理器中的硬件的集成逻辑电路和/或软件形式的指令完成,结合本申请实施例公开的方法的步骤可以直接体现为硬件译码处理器执行完成,或者用译码处理器中的硬件及软件模块组合执行完成。
可选地,软件模块可以位于随机存储器,闪存、只读存储器、可编程只读存储器、电可擦写可编程存储器、寄存器等本领域的成熟的存储介质中。该存储介质位于存储器,处理器读取存储器中的信息,结合其硬件完成上述方法实施例中的步骤。
例如,上文涉及的获取单元和映射单元可分别由处理器实现,上述存储单元可由存储器实现。
图9是本申请实施例的通信设备700示意性结构图。
如图9所示,所述通信设备700可包括处理器710。
其中,处理器710可以从存储器中调用并运行计算机程序,以实现本申请实施例中的方法。
请继续参见图9,通信设备700还可以包括存储器720。
其中,该存储器720可以用于存储指示信息,还可以用于存储处理器710执行的代码、指令等。其中,处理器710可以从存储器720中调用并运行计算机程序,以实现本申请实施例中的方法。存储器720可以是独立于处理器710的一个单独的器件,也可以集成在处理器710中。
请继续参见图9,通信设备700还可以包括收发器730。
其中,处理器710可以控制该收发器730与其他设备进行通信,具体地,可以向其他设备发送信息或数据,或接收其他设备发送的信息或数据。收发器730可以包括发射机和接收机。收发器730还可以进一步包括天线,天线的数量可以为一个或多个。
应当理解,该通信设备700中的各个组件通过总线系统相连,其中,总线系统除包括数据总线之外,还包括电源总线、控制总线和状态信号总线。
还应理解,该通信设备700可为本申请实施例的数据序列化装置,并且该通信设备700可以实现本申请实施例的各个方法中由数据序列化装置实现的相应流程,也就是说,本申请实施例的通信设备700可对应于本申请实施例中的装置500,并可以对应于执行根据本申请实施例的方法200或400中的相应主体,为了简洁,在此不再赘述。类似地,该通信设备700可为本申请实施例的数据反序列化装置,并且该通信设备700可以实现本申请实施例的各个方法中由数据反序列化装置实现的相应流程。也就是说,本申请实施例的通信设备700可对应于本申请实施例中的装置600,并可以对应于执行根据本申请实施例的方法300或400中的相应主体,为了简洁,在此不再赘述。
此外,本申请实施例中还提供了一种芯片。
例如,芯片可能是一种集成电路芯片,具有信号的处理能力,可以实现或者执行本申请实施例中的公开的各方法、步骤及逻辑框图。所述芯片还可以称为系统级芯片,系统芯片,芯片系统或片上系统芯片等。可选地,该芯片可应用到各种通信设备中,使得安装有该芯片的通信设备能够执行本申请实施例中的公开的各方法、步骤及逻辑框图。
图10是根据本申请实施例的芯片800的示意性结构图。
如图10所示,所述芯片800包括处理器810。
其中,处理器810可以从存储器中调用并运行计算机程序,以实现本申请实施例中的方法。
请继续参见图10,所述芯片800还可以包括存储器820。
其中,处理器810可以从存储器820中调用并运行计算机程序,以实现本申请实施例中的方法。该存储器820可以用于存储指示信息,还可以用于存储处理器810执行的代码、指令等。存储器820可以是独立于处理器810的一个单独的器件,也可以集成在处理器810中。
请继续参见图10,所述芯片800还可以包括输入接口830。
其中,处理器810可以控制该输入接口830与其他设备或芯片进行通信,具体地,可以获取其他设备或芯片发送的信息或数据。
请继续参见图10,所述芯片800还可以包括输出接口840。
其中,处理器810可以控制该输出接口840与其他设备或芯片进行通信,具体地,可以向其他设备或芯片输出信息或数据。
应理解,所述芯片800可应用于本申请实施例中的网络设备,并且该芯片可以实现本申请实施例的各个方法中由网络设备实现的相应流程,也可以实现本申请实施例的各个方法中由终端设备实现的相应流程,为了简洁,在此不再赘述。
还应理解,该芯片800中的各个组件通过总线系统相连,其中,总线系统除包括数据总线之外,还包括电源总线、控制总线和状态信号总线。
上文涉及的处理器可以包括但不限于:
通用处理器、数字信号处理器(Digital Signal Processor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现场可编程门阵列(FieldProgrammable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等等。
所述处理器可以用于实现或者执行本申请实施例中的公开的各方法、步骤及逻辑框图。结合本申请实施例所公开的方法的步骤可以直接体现为硬件译码处理器执行完成,或者用译码处理器中的硬件及软件模块组合执行完成。软件模块可以位于随机存储器,闪存、只读存储器,可编程只读存储器或者可擦写可编程存储器、寄存器等本领域成熟的存储介质中。该存储介质位于存储器,处理器读取存储器中的信息,结合其硬件完成上述方法的步骤。
上文涉及的存储器包括但不限于:
易失性存储器和/或非易失性存储器。其中,非易失性存储器可以是只读存储器(Read-Only Memory,ROM)、可编程只读存储器(Programmable ROM,PROM)、可擦除可编程只读存储器(Erasable PROM,EPROM)、电可擦除可编程只读存储器(Electrically EPROM,EEPROM)或闪存。易失性存储器可以是随机存取存储器(Random Access Memory,RAM),其用作外部高速缓存。通过示例性但不是限制性说明,许多形式的RAM可用,例如静态随机存取存储器(Static RAM,SRAM)、动态随机存取存储器(Dynamic RAM,DRAM)、同步动态随机存取存储器(Synchronous DRAM,SDRAM)、双倍数据速率同步动态随机存取存储器(Double DataRate SDRAM,DDR SDRAM)、增强型同步动态随机存取存储器(Enhanced SDRAM,ESDRAM)、同步连接动态随机存取存储器(synch link DRAM,SLDRAM)和直接内存总线随机存取存储器(Direct Rambus RAM,DR RAM)。
应注意,本文描述的存储器旨在包括这些和其它任意适合类型的存储器。
本申请实施例中还提供了一种计算机可读存储介质,用于存储计算机程序。该计算机可读存储介质存储一个或多个程序,该一个或多个程序包括指令,该指令当被包括多个应用程序的便携式电子设备执行时,能够使该便携式电子设备执行方法300至方法500所示实施例的方法。
可选地,该计算机可读存储介质可应用于各种类型的设备。例如,接入终端、用户设备(User Equipment,UE)、用户单元、用户站、移动站、移动台、远方站、远程终端、移动设备、用户终端、终端、无线通信设备、用户代理或用户装置。接入终端可以是蜂窝电话、无绳电话、会话启动协议(Session Initiation Protocol,SIP)电话、无线本地环路(WirelessLocal Loop,WLL)站、个人数字处理(Personal Digital Assistant,PDA)、具有无线通信功能的手持设备、计算设备或连接到无线调制解调器的其它处理设备、车载设备、可穿戴设备。
本申请实施例中还提供了一种计算机程序。可选的,该计算机程序可应用于各种类型的设备,当该计算机程序在计算机上运行时,使得计算机执行本申请实施例的各个方法中由相应的的执行主体实现的相应流程,为了简洁,在此不再赘述。
本申请实施例中还提供了一种计算机程序产品,包括计算机程序。
还应当理解,在本申请实施例和所附权利要求书中使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本申请实施例。
例如,在本申请实施例和所附权利要求书中所使用的单数形式的“一种”、“所述”、“上述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。
所属领域的技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请实施例的范围。
如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请实施例的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器、随机存取存储器、磁碟或者光盘等各种可以存储程序代码的介质。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统、装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在本申请提供的几个实施例中,应该理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。
例如,以上所描述的装置实施例中单元或模块或组件的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如,多个单元或模块或组件可以结合或者可以集成到另一个系统,或一些单元或模块或组件可以忽略,或不执行。
又例如,上述作为分离/显示部件说明的单元/模块/组件可以是或者也可以不是物理上分开的,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元/模块/组件来实现本申请实施例的目的。
最后,需要说明的是,上文中显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
以上内容,仅为本申请实施例的具体实施方式,但本申请实施例的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请实施例揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本申请实施例的保护范围之内。因此,本申请实施例的保护范围应以权利要求的保护范围为准。
Claims (32)
1.一种序列化方法,其特征在于,包括:
获取待序列化的数据结构,所述数据结构包括至少一个数据项;
获取所述数据结构对应的第一级单链表,所述第一级单链表包括第一节点,所述第一节点用于表征所述至少一个数据项中的第一数据项的数据的存储信息,或所述第一节点用于表征所述第一数据项对应的次级单链表的存储信息;
将所述第一级单链表和所述至少一个数据项的数据分别存储至第一内存区和第二内存区。
2.根据权利要求1所述的方法,其特征在于,所述第一级单链表包括所述至少一个数据项中每一个数据项对应的节点,所述第一级单链表中除最后一个节点之外的所述第一节点还用于表征与所述第一节点相邻的下一个节点的存储信息。
3.根据权利要求2所述的方法,其特征在于,所述第一节点包括所述下一个节点的节点地址指示信息,所述节点地址指示信息为:所述下一个节点在所述第一内存区的地址,相对所述第一级单链表中的第一个节点在所述第一内存区的地址的偏移量。
4.根据权利要求1所述的方法,其特征在于,所述第一节点包括数据地址指示信息,所述数据地址指示信息为:所述第一数据项的数据在所述第二内存区的地址,相对所述第一级单链表中的第一个节点在所述第一内存区的地址的偏移量。
5.根据权利要求1所述的方法,其特征在于,所述第一数据项包括子数据结构;
其中,所述将所述第一级单链表和所述至少一个数据项的数据分别存储至所述第一内存区和所述第二内存区,包括:
获取所述子数据结构对应的次级单链表,所述第一节点包括链表地址指示信息,所述链表地址指示信息为:所述次级单链表中的第一个次级节点在所述第一内存区的地址,相对所述第一级单链表中的第一个节点在所述第一内存区的地址的偏移量;
将所述第一级单链表和所述次级单链表存储至所述第一内存区,并将所述至少一个数据项的数据和所述子数据结构中的子数据项的数据存储至所述第二内存区。
6.根据权利要求5所述的方法,其特征在于,所述次级单链表位于所述第一级单链表之后,且所述次级单链表在所述第一内存区的存储位置和所述第一级单链表在所述第一内存区的存储位置连续。
7.根据权利要求5所述的方法,其特征在于,所述第一级单链表中的节点所包括的信息的类型和所述次级单链表中的次级节点所包括的信息的类型相同。
8.根据权利要求1至7中任一项所述的方法,其特征在于,所述第一节点包括以下中的至少一项:
功能域,用于指示所述第一数据项的功能;
长度域,用于指示所述第一数据项的数据的长度;或
类型域,用于指示所述第一数据项的数据的类型。
9.根据权利要求8所述的方法,其特征在于,所述功能包括所述第一数据项的名称和/或所述第一数据项的数据的地址的长度。
10.根据权利要求8所述的方法,其特征在于,所述类型域用于指示所述第一数据项的数据为以下类型中的至少一项:
立即数,用于指示所述第一数据项的数据为最终数据;
路径地址指示信息,用于指示所述第一数据项的数据的类型为所述最终数据所在的文件的路径;或
子数据结构地址指示信息,用于指示所述第一数据项的数据的类型为指向一个子数据结构的地址指示信息。
11.根据权利要求1至7中任一项所述的方法,其特征在于,所述至少一个数据项的数据包括基于预设数量的字节对齐的int数据或结构体数据。
12.根据权利要求1至7中任一项所述的方法,其特征在于,所述第二内存区内,所述至少一个数据项的数据类型相同的数据的存储地址连续。
13.根据权利要求1至7中任一项所述的方法,其特征在于,所述第一内存区和所述第二内存区连续,且所述第一内存区位于所述第二内存区之前。
14.一种反序列化方法,其特征在于,包括:
获取序列化数据;
将所述序列化数据中的第一级单链表和至少一个数据项的数据分别映射至第三内存区和第四内存区;所述第一级单链表包括第一节点,所述第一节点用于表征所述至少一个数据项中的第一数据项的数据的存储信息,或所述第一节点用于表征所述第一数据项对应的次级单链表的存储信息;
基于所述第一级单链表中的节点,获取所述至少一个数据项的数据,以得到数据结构。
15.根据权利要求14所述的方法,其特征在于,所述第一级单链表包括所述至少一个数据项中每一个数据项对应的节点,所述第一级单链表中除最后一个节点之外的所述第一节点还用于表征与所述第一节点相邻的下一个节点的存储信息。
16.根据权利要求15所述的方法,其特征在于,所述第一节点包括所述下一个节点的节点地址指示信息,所述节点地址指示信息为:所述下一个节点在所述第三内存区的地址,相对所述第一级单链表中的第一个节点在所述第三内存区的地址的偏移量;
所述方法还包括:
基于所述节点地址指示信息指示的偏移量和所述第一个节点在所述第三内存区的地址,确定所述下一个节点在所述第三内存区的地址。
17.根据权利要求14所述的方法,其特征在于,所述第一节点包括数据地址指示信息,所述数据地址指示信息为:所述第一数据项的数据在所述第四内存区的地址,相对所述第一级单链表中的第一个节点在所述第三内存区的地址的偏移量;
所述方法还包括:
基于所述数据地址指示信息指示的偏移量和所述第一个节点在所述第三内存区的地址,确定所述第一数据项在所述第四内存区的地址。
18.根据权利要求14所述的方法,其特征在于,所述第一节点包括链表地址指示信息,所述链表地址指示信息为:次级单链表中的第一个次级节点在所述第三内存区的地址,相对所述第一级单链表中的第一个节点在所述第三内存区的地址的偏移量;
其中,所述基于所述第一级单链表中的节点,获取所述至少一个数据项的数据,以得到数据结构,包括:
基于所述链表地址指示信息获取所述次级单链表;
基于所述次级单链表中的次级节点,获取所述第一数据项中的子数据结构中的子数据项的数据,以得到所述数据结构。
19.根据权利要求18所述的方法,其特征在于,所述次级单链表位于所述第一级单链表之后,且所述次级单链表在所述第三内存区的存储位置和所述第一级单链表在所述第三内存区的存储位置连续。
20.根据权利要求18所述的方法,其特征在于,所述第一级单链表中的节点所包括的信息的类型和所述次级单链表中的次级节点所包括的信息的类型相同。
21.根据权利要求14至20中任一项所述的方法,其特征在于,所述第一节点还包括以下中的至少一项:
功能域,用于指示所述第一数据项的功能;
长度域,用于指示所述第一数据项的数据的长度;或
类型域,用于指示所述第一数据项的数据的类型。
22.根据权利要求21所述的方法,其特征在于,所述功能包括所述第一数据项的名称和/或所述第一数据项的数据的地址的长度。
23.根据权利要求21所述的方法,其特征在于,所述类型域用于指示所述第一数据项的数据为以下类型中的至少一项:
立即数,用于指示所述第一数据项的数据为最终数据;
路径地址指示信息,用于指示所述第一数据项的数据的类型为所述最终数据所在的文件的路径;或
子数据结构地址指示信息,用于指示所述第一数据项的数据的类型为指向一个子数据结构的地址指示信息。
24.根据权利要求23所述的方法,其特征在于,所述立即数可指示的数据类型包括以下中的至少一项:
整数int类型、字符类型或浮点类型。
25.根据权利要求14至20中任一项所述的方法,其特征在于,所述至少一个数据项的数据包括基于预设数量的字节对齐的int数据或结构体数据。
26.根据权利要求14至20中任一项所述的方法,其特征在于,所述第四内存区内,所述至少一个数据项的数据类型相同的数据的存储地址连续。
27.根据权利要求14至20中任一项所述的方法,其特征在于,所述第三内存区和所述第四内存区连续,且所述第三内存区位于所述第四内存区之前。
28.一种序列化方法,其特征在于,包括:
获取待序列化的数据结构,所述数据结构包括至少一个数据项;
获取所述数据结构对应的第一级单链表,所述第一级单链表包括第二节点和第三节点,所述第二节点用于表征所述至少一个数据项中的第二数据项的数据的存储信息,所述第三节点用于表征所述至少一个数据项中的第三数据项对应的次级单链表的存储信息;
将所述第一级单链表和所述至少一个数据项的数据分别存储至第一内存区和第二内存区。
29.一种反序列化方法,其特征在于,包括:
获取序列化数据;
将所述序列化数据中的第一级单链表和至少一个数据项的数据分别映射至第三内存区和第四内存区;所述第一级单链表包括第二节点和第三节点,所述第二节点用于表征所述至少一个数据项中的第二数据项的数据的存储信息,所述第三节点用于表征所述至少一个数据项中的第三数据项对应的次级单链表的存储信息;
基于所述第一级单链表中的节点,获取所述至少一个数据项的数据,以得到数据结构。
30.一种通信设备,其特征在于,包括:
处理器、存储器和收发器,所述存储器用于存储计算机程序,所述处理器用于调用并运行所述存储器中存储的计算机程序,以执行如权利要求1至13中任一项所述的方法、如权利要求14至27中任一项所述的方法、如权利要求28所述的方法或如权利要求29所述的方法。
31.一种芯片,其特征在于,包括:
处理器,用于从存储器中调用并运行计算机程序,使得安装有所述芯片的设备执行如权利要求1至13中任一项所述的方法、如权利要求14至27中任一项所述的方法、如权利要求28所述的方法或如权利要求29所述的方法。
32.一种计算机可读存储介质,其特征在于,用于存储计算机程序,所述计算机程序使得计算机执行如权利要求1至13中任一项所述的方法、如权利要求14至27中任一项所述的方法、如权利要求28所述的方法或如权利要求29所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011364246.9A CN114564509A (zh) | 2020-11-27 | 2020-11-27 | 序列化方法、反序列化方法、设备、芯片以及介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011364246.9A CN114564509A (zh) | 2020-11-27 | 2020-11-27 | 序列化方法、反序列化方法、设备、芯片以及介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114564509A true CN114564509A (zh) | 2022-05-31 |
Family
ID=81712492
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011364246.9A Pending CN114564509A (zh) | 2020-11-27 | 2020-11-27 | 序列化方法、反序列化方法、设备、芯片以及介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114564509A (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115129325A (zh) * | 2022-06-29 | 2022-09-30 | 北京五八信息技术有限公司 | 一种数据处理方法、装置、电子设备及存储介质 |
CN115941750A (zh) * | 2023-01-18 | 2023-04-07 | 禾多科技(北京)有限公司 | 自动驾驶系统芯片的算力优化方法、设备和计算机介质 |
CN116932615A (zh) * | 2023-09-19 | 2023-10-24 | 北京城建智控科技股份有限公司 | 自适应协议的数据序列化方法及装置 |
-
2020
- 2020-11-27 CN CN202011364246.9A patent/CN114564509A/zh active Pending
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115129325A (zh) * | 2022-06-29 | 2022-09-30 | 北京五八信息技术有限公司 | 一种数据处理方法、装置、电子设备及存储介质 |
CN115129325B (zh) * | 2022-06-29 | 2023-05-23 | 北京五八信息技术有限公司 | 一种数据处理方法、装置、电子设备及存储介质 |
CN115941750A (zh) * | 2023-01-18 | 2023-04-07 | 禾多科技(北京)有限公司 | 自动驾驶系统芯片的算力优化方法、设备和计算机介质 |
CN115941750B (zh) * | 2023-01-18 | 2023-05-23 | 禾多科技(北京)有限公司 | 自动驾驶系统芯片的算力优化方法、设备和计算机介质 |
CN116932615A (zh) * | 2023-09-19 | 2023-10-24 | 北京城建智控科技股份有限公司 | 自适应协议的数据序列化方法及装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
EP3667496B1 (en) | Distributed computing system, data transmission method and device in distributed computing system | |
CN114564509A (zh) | 序列化方法、反序列化方法、设备、芯片以及介质 | |
CN106407201B (zh) | 一种数据处理方法、装置及计算机可读存储介质 | |
CN111767143A (zh) | 交易数据处理方法、装置、设备及系统 | |
WO2017059798A1 (zh) | 序列化与反序列化的方法、装置、系统以及电子设备 | |
CN112650533B (zh) | 接口文档的生成方法、装置和终端设备 | |
US20210081770A1 (en) | System architecture based on soc fpga for edge artificial intelligence computing | |
CN109460220A (zh) | 报文预定义代码生成方法、装置、电子设备和存储介质 | |
US7404186B2 (en) | Signature serialization | |
CN114331416A (zh) | 数据处理的方法、装置、电子设备及存储介质 | |
US9772951B2 (en) | Preemptive guest merging for virtualization hypervisors | |
CN110109983B (zh) | 一种操作Redis数据库的方法和装置 | |
WO2020224380A1 (zh) | 一种基于区块链的数据处理方法及装置 | |
WO2016169032A1 (zh) | 数据格式转换装置、缓冲芯片及方法 | |
US9129035B2 (en) | Systems, methods, and apparatus for accessing object representations of data sets | |
CN113672030B (zh) | 数据传输速率发生器和相关装置及方法 | |
CN116560878B (zh) | 一种内存共享方法和相关装置 | |
CN107544916B (zh) | 一种缓存方法及存储设备 | |
CN115328679A (zh) | 异构函数库的自动化集成方法、计算设备及其系统 | |
CN110231935B (zh) | 一种脚本执行和更新的方法、装置、设备和存储介质 | |
CN116561202A (zh) | 一种对象序列化处理的方法和装置 | |
CN113468258A (zh) | 一种异构数据的转换方法、装置及存储介质 | |
CN114244912A (zh) | 数据传输方法、装置、计算机设备及存储介质 | |
CN115659941B (zh) | 适应于多类型接口的文件生成方法及装置 | |
CN113608703B (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 |