CN110096624B - 一种编解码方法、装置、计算机设备及存储介质 - Google Patents
一种编解码方法、装置、计算机设备及存储介质 Download PDFInfo
- Publication number
- CN110096624B CN110096624B CN201910343404.3A CN201910343404A CN110096624B CN 110096624 B CN110096624 B CN 110096624B CN 201910343404 A CN201910343404 A CN 201910343404A CN 110096624 B CN110096624 B CN 110096624B
- Authority
- CN
- China
- Prior art keywords
- sub
- operation object
- decoding
- objects
- position offset
- 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
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/90—Details of database functions independent of the retrieved data types
- G06F16/901—Indexing; Data structures therefor; Storage structures
- G06F16/9024—Graphs; Linked lists
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/903—Querying
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06Q—INFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES; SYSTEMS OR METHODS SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES, NOT OTHERWISE PROVIDED FOR
- G06Q20/00—Payment architectures, schemes or protocols
- G06Q20/38—Payment protocols; Details thereof
- G06Q20/389—Keeping log of transactions for guaranteeing non-repudiation of a transaction
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M7/00—Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
- H03M7/30—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
- H03M7/40—Conversion to or from variable length codes, e.g. Shannon-Fano code, Huffman code, Morse code
- H03M7/4031—Fixed length to variable length coding
- H03M7/4037—Prefix coding
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Databases & Information Systems (AREA)
- Business, Economics & Management (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Accounting & Taxation (AREA)
- Computational Linguistics (AREA)
- Software Systems (AREA)
- Finance (AREA)
- Strategic Management (AREA)
- General Business, Economics & Management (AREA)
- Compression, Expansion, Code Conversion, And Decoders (AREA)
Abstract
本发明公开了一种编解码方法、装置、计算机设备及存储介质,其中方法为:获取编码对象;获取编码对象;将所述编码对象作为第一操作的操作对象,对所述编码对象按照所述第一操作进行编码;所述第一操作为:确定M,M为所述第一操作的操作对象包括的子操作对象个数;若M大于1,所述操作对象中子操作对象的预设顺序,对每个子操作对象,执行预设步骤,获取该子操作对象的编码、确定该子操作对象的编码相对于所述操作对象的编码起始地址的位置偏移量,使得使用此编解码方法的区块链(Block Chain)系统支持任意位置解析。
Description
技术领域
本发明涉及科技金融(Finteh)和区块链(blockchain)领域,尤其涉及一种编解码方法、装置、计算机设备及存储介质。
背景技术
随着计算机技术的发展,越来越多的技术应用在金融领域,传统金融业正在逐步向科技金融(Finteh)转变。目前,科技金融领域的区块链(blockchain)节点的通信和存储,都需要进行编解码。一个数据包,从一个节点发送到另一个节点,需要先编码,再解码。一条区块数据,被写入一个节点时,需要先编码,再写入。而区块数据从一个节点中读取出来,也需要先解码,再读取。
现有技术中采用的是递归长度前缀(recursive length prefix,RLP)编码,这种方式是区块链上普遍采用的一种编码方式。但由于RLP中编解码是通过递归进行的,在对每个编码对象进行编码前,无法获取编码之后编码对象在区块数据整体RLP编码中的位置,因此,对每个编码对象只能进行顺序访问,即访问一个编码对象之前,必须先访问它之前的编码对象,不支持随机访问。
因此,现有技术中,RLP编码中对每个对象只能进行顺序访问,不支持随机访问是一个亟待解决的问题。
发明内容
本申请实施例提供一种编解码方法、装置、计算机设备及存储介质,解决了现有技术中RLP编码中对每个对象只能进行顺序访问,不支持随机访问的问题。
本申请实施例提供一种编码方法,包括:获取编码对象;将所述编码对象作为第一操作的操作对象,对所述编码对象按照所述第一操作进行编码;所述第一操作为:确定M,M为所述第一操作的操作对象包括的子操作对象个数;若M等于1,则对所述操作对象中唯一的子操作对象进行递归长度前缀RLP编码,获取该子操作对象的RLP编码;若M大于1,按照所述操作对象中子操作对象的预设顺序,对每个子操作对象,执行以下步骤:将该子操作对象作为所述第一操作的操作对象,对该子操作对象按照所述第一操作进行编码,获取该子操作对象的编码;确定该子操作对象的编码相对于所述操作对象的编码起始地址的位置偏移量;若确定所述操作对象中存在未被编码的子操作对象,则返回所述将该子操作对象作为所述第一操作的操作对象的步骤;否则,根据所述操作对象中每个子操作对象的编码,以及该子操作对象相对于所述起始地址的位置偏移量,确定所述操作对象的编码信息。
可选的,所述确定该子操作对象的编码相对于所述操作对象的编码起始地址的位置偏移量,包括:若所述操作对象中执行了所述第一操作的子操作对象的顺序,不为所述预设顺序中的首个,则根据该子操作对象在所述预设顺序中前一个子操作对象编码的编码长度,以及该子操作对象在所述预设顺序中前一个子操作对象的编码相对于所述操作对象的编码起始地址的位置偏移量,确定该子操作对象的编码相对于所述起始地址的位置偏移量。
可选的,所述确定该子操作对象的编码相对于所述操作对象的编码起始地址的位置偏移量,还包括:若所述操作对象中执行了所述第一操作的子操作对象的顺序,为所述预设顺序中的首个,则将0作为该子操作对象的编码相对于所述操作对象的编码起始地址的位置偏移量。
可选的,所述根据所述操作对象中每个子操作对象的编码,以及该子操作对象相对于所述起始地址的位置偏移量,确定所述操作对象的编码信息,包括:将按M、位置偏移量部分、编码部分先后顺序组合的信息,作为所述操作对象的编码信息;所述位置偏移量部分为:所述操作对象中所有子操作对象的编码相对于所述操作对象的编码起始地址的位置偏移量,按照所述预设顺序的组合;所述编码部分为:所述操作对象中所有子操作对象的编码,按照所述预设顺序的组合。
本申请实施例中,获取编码对象之后,将编码对象作为第一操作的操作对象,对编码对象按照第一操作进行编码,第一操作中,首先确定M,M为所述第一操作的操作对象包括的子操作对象个数,第一操作按操作对象中的子操作对象分两种情况,第一种情况为:若M等于1,则对所述操作对象中唯一的子操作对象进行递归长度前缀RLP编码,获取该子操作对象的RLP编码,显然,这种情况是支持随机访问的;第二种情况为:若M大于1,按照所述操作对象中子操作对象的预设顺序,对每个子操作对象按照所述第一操作进行编码,获取该子操作对象的编码之后,再确定该子操作对象的编码相对于所述操作对象的编码起始地址的位置偏移量,因此,可直接根据每个子操作对象的编码相对于所述操作对象的编码起始地址的位置偏移量,定位到该子操作对象的编码,这种情况也是支持随机访问的。
本申请实施例提供了一种解码方法,包括:获取第一解码对象相对于区块数据的第一起始地址的第一位置偏移量;所述第一解码对象为所述区块数据中至少两个解码对象中任意一个;根据所述第一位置偏移量,获取所述第一解码对象;若所述第一解码对象包括至少两个子解码对象,则所述第一解码对象还包括所述至少两个子解码对象中每个子解码对象相对于所述第一解码对象的第二起始地址的第二位置偏移量;根据所述至少两个子解码对象中每个子解码对象相对于所述第一解码对象的第二起始地址的第二位置偏移量,对所述第一解码对象进行解码。
可选的,所述根据所述至少两个子解码对象中每个子解码对象相对于所述第一解码对象的第二起始地址的第二位置偏移量,对所述第一解码对象进行解码,包括:将所述第一解码对象作为第一操作的操作对象,对所述第一解码对象按照所述第一操作进行解码;所述第一操作为:确定N,N为所述第一操作的操作对象包括的子操作对象个数;若N等于1,则对所述操作对象中唯一的子操作对象进行递归长度前缀RLP解码,获取该子操作对象的RLP解码;若N大于1,按照所述操作对象中子操作对象的预设顺序,对每个子操作对象,执行以下步骤:获取该子操作对象相对于所述操作对象的第三起始地址的第三位置偏移量,并根据该第三位置偏移量,获取该子操作对象;将该子操作对象作为所述第一操作的操作对象,对该子操作对象按照所述第一操作进行解码,获取该子操作对象的解码;若确定所述操作对象中存在未被解码的子操作对象,则返回所述获取该子操作对象相对于所述操作对象的所述第三起始地址的第三位置偏移量的步骤。
本申请实施例提供一种编码装置,包括:获取模块,用于获取编码对象;编码模块,用于将所述编码对象作为第一操作的操作对象,对所述编码对象按照所述第一操作进行编码;所述第一操作为:确定M,M为所述第一操作的操作对象包括的子操作对象个数;以及用于若M等于1,则对所述操作对象中唯一的子操作对象进行递归长度前缀RLP编码,获取该子操作对象的RLP编码;若M大于1,按照所述操作对象中子操作对象的预设顺序,对每个子操作对象,执行以下步骤:将该子操作对象作为所述第一操作的操作对象,对该子操作对象按照所述第一操作进行编码,获取该子操作对象的编码;确定该子操作对象的编码相对于所述操作对象的编码起始地址的位置偏移量;若确定所述操作对象中存在未被编码的子操作对象,则返回所述将该子操作对象作为所述第一操作的操作对象的步骤;否则,根据所述操作对象中每个子操作对象的编码,以及该子操作对象相对于所述起始地址的位置偏移量,确定所述操作对象的编码信息。
可选的,所述编码模块具体用于:若所述操作对象中执行了所述第一操作的子操作对象的顺序,不为所述预设顺序中的首个,则根据该子操作对象在所述预设顺序中前一个子操作对象编码的编码长度,以及该子操作对象在所述预设顺序中前一个子操作对象的编码相对于所述操作对象的编码起始地址的位置偏移量,确定该子操作对象的编码相对于所述起始地址的位置偏移量。
可选的,所述编码模块还用于:若所述操作对象中执行了所述第一操作的子操作对象的顺序,为所述预设顺序中的首个,则将0作为该子操作对象的编码相对于所述操作对象的编码起始地址的位置偏移量。
可选的,所述编码模块具体用于:将按M、位置偏移量部分、编码部分先后顺序组合的信息,作为所述操作对象的编码信息;所述位置偏移量部分为:所述操作对象中所有子操作对象的编码相对于所述操作对象的编码起始地址的位置偏移量,按照所述预设顺序的组合;所述编码部分为:所述操作对象中所有子操作对象的编码,按照所述预设顺序的组合。
一种解码装置,包括:获取模块,用于获取第一解码对象相对于区块数据的第一起始地址的第一位置偏移量;所述第一解码对象为所述区块数据中至少两个解码对象中任意一个;解码模块,用于根据所述第一位置偏移量,获取所述第一解码对象;若所述第一解码对象包括至少两个子解码对象,则所述第一解码对象还包括所述至少两个子解码对象中每个子解码对象相对于所述第一解码对象的第二起始地址的第二位置偏移量;以及用于根据所述至少两个子解码对象中每个子解码对象相对于所述第一解码对象的第二起始地址的第二位置偏移量,对所述第一解码对象进行解码。
可选的,所述解码模块,具体用于:将所述第一解码对象作为第一操作的操作对象,对所述第一解码对象按照所述第一操作进行解码;所述第一操作为:确定N,N为所述第一操作的操作对象包括的子操作对象个数;若N等于1,则对所述操作对象中唯一的子操作对象进行递归长度前缀RLP解码,获取该子操作对象的RLP解码;若N大于1,按照所述操作对象中子操作对象的预设顺序,对每个子操作对象,执行以下步骤:获取该子操作对象相对于所述操作对象的第三起始地址的第三位置偏移量,并根据该第三位置偏移量,获取该子操作对象;将该子操作对象作为所述第一操作的操作对象,对该子操作对象按照所述第一操作进行解码,获取该子操作对象的解码;若确定所述操作对象中存在未被解码的子操作对象,则返回所述获取该子操作对象相对于所述操作对象的所述第三起始地址的第三位置偏移量的步骤。
本申请实施例提供一种计算机设备,包括程序或指令,当所述程序或指令被执行时,如本申请实施例提供的一种编码方法及可选方法或者解码方法及可选方法被执行。
本申请实施例提供一种存储介质,包括程序或指令,当所述程序或指令被执行时,如本申请实施例提供的一种解码方法及可选方法或者解码方法及可选方法被执行。
附图说明
图1为区块链的结构示意图;
图2为本申请实施例提供的一种编码方法的流程示意图;
图3为本申请实施例提供的一种编码方法中编码的格式示意图;
图4为本申请实施例提供的一种解码方法的流程示意图;
图5为本申请实施例提供的一种编码方法的具体流程示意图;
图6为本申请实施例提供的一种解码方法的具体流程示意图;
图7为本申请实施例提供的一种编码装置的结构示意图;
图8为本申请实施例提供的一种解码装置的结构示意图。
具体实施方式
为了更好的理解上述技术方案,下面将结合说明书附图及具体的实施方式对上述技术方案进行详细的说明,应当理解本申请实施例以及实施例中的具体特征是对本申请技术方案的详细的说明,而不是对本申请技术方案的限定,在不冲突的情况下,本申请实施例以及实施例中的技术特征可以相互结合。
如图1所示,为区块链的结构示意图。区块链是由一系列区块组成的一条链,每个区块上除了记录本区块的数据还会记录上一个区块的哈希(Hash)值,通过这种方式组成一条链。区块链的核心理念有两个,一个是密码学技术,另一个是去中心化思想,基于这两个理念做到区块链上的历史信息无法被篡改。一个区块由块头和块体组成,其中块头定义包括该区块高度,在区块生成顺序中的上一个区块的哈希值等重要字段,而区块的块体包括交易数据。
在区块链网络中,一个节点是指一个具有唯一身份的参与者,节点参与区块链网络组建和数据交换。该节点具有一份完整的账本拷贝,具有参与区块链网络共识和账本维护的能力。交易是用户对区块链的操作请求。交易由用户发起,从用户的客户端发往区块链节点,区块链节点收到交易后,将交易打包成区块去执行。为了完成交易,区块链节点之间需要进行通信和存储。
在区块链节点的通信和存储的过程中,都需要进行编解码。一个数据包,从一个节点发送到另一个节点,需要先编码,再解码。一条区块数据,被写入一个节点时,需要先编码,再写入。而区块数据从一个节点中读取出来,也需要先解码,再读取。
目前区块链节点采用的编码格式是RLP编码。RLP编码以编码对象的个数为开头,编码对象紧随其后,但每个编码对象的大小是不固定的。RLP通过一种长度前缀和递归结合的方式,理论上可编码任意个数的对象。由于RLP编码是递归的,在编码前,无法获知编码后的长度。因此,仅编码对象的个数由于RLP编码中,每个对象的长度不确定,且RLP编码只记录了对象的个数,没记录对象的字节长度。因此RLP编码无法支持对任意位置的解码。若要获取其中的一个编码对象,必须递归解码其前序的所有对象,在解码前序的对象后,才能访问到需要访问的编码对象的字节位置,性能非常低。因此,RLP的编解码是递归的,只能顺序访问,不支持随机访问。
然而,在现有的区块链节点中,有任意访问某个编码对象的需求。举例来说,是在批量交易的编解码中,有访问某个特定的已经被编码的交易对象的需求。
为此,如图2所示,本申请实施例提出一种编码方法。
步骤201:获取编码对象。
步骤202:将编码对象作为第一操作的操作对象,对编码对象按照第一操作进行编码。
步骤202中,第一操作包括:
(1)确定M,M为第一操作的操作对象包括的子操作对象个数。显然,第一操作的操作对象包括的子操作对象个数至少为一个。
若M等于1,则执行第二步,M大于1否则执行第三步。
(2)若M等于1,则对操作对象中唯一的子操作对象进行递归长度前缀RLP编码,获取该子操作对象的RLP编码。
也就是说,当一个编码对象仅包括一个子编码对象时,这个编码对象的编码就是RLP编码。
(3)若M大于1,按照操作对象中子操作对象的预设顺序,对每个子操作对象,执行以下步骤:
第一步、将该子操作对象作为第一操作的操作对象,对该子操作对象按照第一操作进行编码,获取该子操作对象的编码。
当操作对象包括大于1个子操作对象时,执行(3),直到操作对象的子操作对象只有一个,不可继续向下一层分割时,才执行(1)进行RLP编码,在此不再赘述。
第二步、确定该子操作对象的编码相对于操作对象的编码的起始地址的位置偏移量。
第三步、根据操作对象中每个子操作对象的RLP编码,以及该子操作对象的编码相对于起始地址的位置偏移量,确定操作对象的编码信息。
需要说明的是,预设顺序可根据具体场景预设,举例来说,按照编码习惯,从左到右的顺序作为预设顺序。
第二步中、子操作对象位置偏移量为:子操作对象的编码的起始地址相对于操作对象的编码的起始地址的字节长度。
若确定操作对象中存在未被编码的子操作对象,则返回第一步;否则,执行第三步。通过对编码对象执行第二步,记录了编码对象中每个子编码对象相对于编码对象的起始地址的位置偏移量,也就是说,能通过每个子编码对象相对于编码对象的起始地址的位置偏移量,定位到对应的子编码对象的位置,直接访问到该子编码对象,实现对编码对象中每个子编码对象的随机访问,提升了访问效率。
第二步中,一种可选的实施方式如下:
若操作对象中执行了第一操作的子操作对象的顺序,不为预设顺序中的首个,则根据该子操作对象在预设顺序中前一个子操作对象RLP编码的编码长度,以及该子操作对象的编码在预设顺序中前一个子操作对象的编码相对于操作对象的编码的起始地址的位置偏移量,确定该子操作对象的编码相对于起始地址的位置偏移量。
举例来说,子操作对象A与子操作对象B为预设顺序中相邻的两个子操作对象,且子操作对象A先于子操作对象B执行第一操作,因此子操作对象A在预设顺序中前一个子操作对象为子操作对象B。子操作对象A相对于操作对象的起始地址的位置偏移量XA,且子操作对象B的编码长度为SB,那么子操作对象B相对于操作对象的起始地址的位置偏移量XB为XA+SB。
第二步中,另一种可选的实施方式如下:
若所述操作对象中执行了所述第一操作的子操作对象的顺序,为所述预设顺序中的首个,则将0作为该子操作对象的编码相对于所述操作对象的编码的起始地址的位置偏移量。
这里需要强调的是,操作对象只有一个子操作对象时的编码,与操作对象有两个及以上子操作对象中第一个子对象的编码不同。操作对象只有一个子操作对象时的编码不记录位置偏移量,但操作对象有两个及以上子操作对象中第一个子对象的编码记录了0,作为位置偏移量,用以为之后子对象的位置偏移量做计算。
第三步中、一种可选的实施方式为:将按M、位置偏移量部分、RLP编码部分先后顺序组合的信息,作为操作对象的编码信息;位置偏移量部分为:操作对象中所有子操作对象的编码相对于操作对象的起始地址的位置偏移量,按照预设顺序的组合;RLP编码部分为:操作对象中所有子操作对象的RLP编码,按照预设顺序的组合。
该可选实施方式中编码的具体结构示意图如图3所示,仅以图3中的具体结构示意图为例说明。
该可选实施方式中包括位置偏移量字段,用以索引每个子编码对象的编码的位置。其中,Obj_num表示子编码对象的个数,Obj表示一个子编码对象的编码,Off_set_x表示第x个子编码对象的编码相对于编码对象的编码的起始地址的位置偏移量,举例来说,从0开始编号,Off_set_0表示Obj_0的相对于编码对象的编码的起始地址的位置偏移量。
该可选实施方式的编码格式的开头为Obj_num,在子编码对象的个数字段后,是位置偏移量部分(Off_sets),位置偏移量部分中所有子操作对象的编码相对于操作对象的编码的起始地址的位置偏移量,是按照预设顺序排列的。而且位置偏移量部分中的每个子操作对象对应的位置偏移量有着固定的长度。因此要读取某个Off_set的值,只需像访问数组一样,根据Off_set的序号直接索引,举例来说,读取第三个元素,直接获取Off_sets中第三个元素即可。
在Off_sets后,是RLP编码部分(Objs),RLP编码部分中所有子操作对象的RLP编码,是按照预设顺序排列的。需要强调的是,Off_sets中相应序号的Off_set,指向相应序号的子编码对象的RLP编码的起始地址。举例来说,Off_set_0指向的子编码对象为Obj_0。
因此,任意解码一个子编码对象的编码,只需要根据子编码对象的序号,找到该子编码对象的编码相对于编码对象的编码起始地址的位置偏移量,再根据该位置偏移量,就可定位到相应子编码对象的编码的起始地址。
当区块数据中有多个编码对象,步骤201~步骤202仅以一个编码对象为例说明,每个编码对象均可按照步骤201~步骤202进行编码。
如图4所示,为本申请实施例提供的一种解码方法的流程示意图。
步骤401:获取第一解码对象相对于区块数据的第一起始地址的第一位置偏移量。
其中,第一解码对象为区块数据中至少两个解码对象中任意一个,解码对象即为编码对象的编码。
步骤402:根据所述第一位置偏移量,获取所述第一解码对象。
由步骤201~步骤202的编码过程可知,若第一解码对象包括至少两个子解码对象,则第一解码对象还包括至少两个子解码对象中每个子解码对象相对于解码对象的第二起始地址的第二位置偏移量。
步骤403:根据所述至少两个子解码对象中每个子解码对象相对于解码对象的第二起始地址的第二位置偏移量,对第一解码对象进行解码。
对第一解码对象进行解码的解码过程为:将第一解码对象作为第一操作的操作对象,对第一解码对象按照第一操作进行解码。所述第一操作为:
(1)确定N,N为所述第一操作的操作对象包括的子操作对象个数。
由步骤201~步骤202可知,当第一操作的操作对象为第一解码对象时,解码对象的首位的数据即为N。
若N等于1,则执行(2)。
(2)对操作对象中唯一的子操作对象进行递归长度前缀RLP解码,获取该子操作对象的RLP解码。
由步骤201~步骤202可知,当第一操作的操作对象为第一解码对象时,第一解码对象为RLP编码,可直接通过RLP解码方式进行解码。
若N大于1,则执行(3)。
(3)按照操作对象中子操作对象的预设顺序,对每个子操作对象,执行以下步骤:
第一步、获取该子操作对象相对于所述操作对象的第三起始地址的第三位置偏移量,并根据该第三位置偏移量,获取该子操作对象。
第二步、将该子操作对象作为所述第一操作的操作对象,对该子操作对象按照所述第一操作进行解码,获取该子操作对象的解码。
第三步、若确定所述操作对象中存在未被解码的子操作对象,则返回所述获取该子操作对象相对于所述操作对象的所述第三起始地址的第三位置偏移量的步骤。
下面结合图5和图6,对本申请实施例中提供的一种编解码方法进行详细说明。
如图5所示,为本申请实施例提供的一种编码方法的具体流程示意图。
在以下步骤501~步骤512的过程中,输入是编码对象,编码对象为一个包含子编码对象的数组Objs,输出是编码对象的二进制编码Rlps。
步骤501:初始化,开辟临时数组(off_sets)并将第一个元素置为0,开辟临时数组(cds)。
off_sets用于缓存编码对象中每个子编码对象的编码相对于编码对象的编码起始地址的位置偏移量。
cds用于缓存编码对象中每个子编码对象的二进制编码。
步骤502:获取Objs中子编码对象的个数(num),将num编码作为Rlps的开头。
步骤503:确定num是否大于1。
若是,则进入步骤504,反之,进入步骤511;
步骤504:按编码对象中子编码对象起始地址从大到小的顺序,从Objs中取出一个未被编码过的子编码对象,作为X。
步骤505:将X作为步骤201~步骤202中第一操作的操作对象,对X进行第一操作,进行编码,获取X的编码(Rlp_X)和以及Rlp_X的编码长度(Rlp_X_Size)。
步骤506:根据Rlp_X_Size,确定X的位置偏移量(off_set_X)。
当X为Objs中首个被编码的子编码对象时,off_set_X为0;否则,off_set_X=(off_set_X-1)+Rlp_X_Size。off_set_X-1为X在预设顺序中前一个子编码对象的编码相对于编码对象起始地址的位置偏移量。
步骤507:将off_set_X追加到off_sets末端,以及将Rlp_X追加到cds末端。
步骤508:确定Objs是否有未被编码过的子编码对象。
若是,则执行步骤504,反之,执行步骤509。
步骤509:将off_sets追加到Rlps的末端。
步骤509之前,Rlps中仅有num。
步骤510:将cds追加到Rlps的末端。
步骤510执行完后,编码过程结束。
步骤511:用RLP编码,对唯一的子编码对象Y进行编码,得到编码Rlp_Y。
步骤512:将Rlp_Y追加到Rlps的末端。
步骤512执行完后,编码过程结束。
如图6所示,为本申请实施例提供的一种解码方法的具体流程示意图。
对任意位置的子编码对象进行解码的过程中,输入是二进制编码Rlps以及需要访问的子编码对象X在编码对象的预设顺序中的序号(X_ID),输出是解码后的子编码对象X。
步骤601:确定Rlps的Obj_num是否大于1。
若是,则进入步骤602,否则,进入步骤606。
步骤602:根据X_ID,获取X-ID在Rlps的Offsets中对应的位置偏移量(Off_set_X)。
步骤603:用Off_set_X的值索引到需要访问的子编码对象X的编码(Rlp_X)。
此时的Rlp_X即为解码对象。
步骤604:确定Rlp_X中是否包括两个及以上的子解码对象。
若是,则执行步骤605;否则,执行步骤606。
步骤605:将Rlp_X作为步骤401~步骤403中第一操作的操作对象,对RlpX按照第一操作进行解码。
需要说明的是,在步骤605的解码过程中,仍然需要继续提供需要访问的下一层的子解码对象的序号。
步骤605执行完后,解码过程结束。
步骤606:对Rlps进行RLP解码,获取子编码对象X。
步骤606执行完后,解码过程结束。
本申请实施例中,获取编码对象之后,将编码对象作为第一操作的操作对象,对编码对象按照第一操作进行编码,第一操作中,首先确定M,M为所述第一操作的操作对象包括的子操作对象个数,第一操作按操作对象中的子操作对象分两种情况,第一种情况为:若M等于1,则对所述操作对象中唯一的子操作对象进行递归长度前缀RLP编码,获取该子操作对象的RLP编码,显然,这种情况是支持随机访问的;第二种情况为:若M大于1,按照所述操作对象中子操作对象的预设顺序,对每个子操作对象按照所述第一操作进行编码,获取该子操作对象的编码之后,再确定该子操作对象的编码相对于所述操作对象的编码起始地址的位置偏移量,因此,可直接根据每个子操作对象的编码相对于所述操作对象的编码起始地址的位置偏移量,定位到该子操作对象的编码,这种情况也是支持随机访问的。
如图7所示,为本申请实施例提供的一种编码装置的结构示意图。
本申请实施例提供一种编码装置,包括:获取模块701,用于获取编码对象;编码模块702,用于将所述编码对象作为第一操作的操作对象,对所述编码对象按照所述第一操作进行编码;所述第一操作为:确定M,M为所述第一操作的操作对象包括的子操作对象个数;以及用于若M等于1,则对所述操作对象中唯一的子操作对象进行递归长度前缀RLP编码,获取该子操作对象的RLP编码;若M大于1,按照所述操作对象中子操作对象的预设顺序,对每个子操作对象,执行以下步骤:将该子操作对象作为所述第一操作的操作对象,对该子操作对象按照所述第一操作进行编码,获取该子操作对象的编码;确定该子操作对象的编码相对于所述操作对象的编码起始地址的位置偏移量;若确定所述操作对象中存在未被编码的子操作对象,则返回所述将该子操作对象作为所述第一操作的操作对象的步骤;否则,根据所述操作对象中每个子操作对象的编码,以及该子操作对象相对于所述起始地址的位置偏移量,确定所述操作对象的编码信息。
可选的,所述编码模块702具体用于:若所述操作对象中执行了所述第一操作的子操作对象的顺序,不为所述预设顺序中的首个,则根据该子操作对象在所述预设顺序中前一个子操作对象编码的编码长度,以及该子操作对象在所述预设顺序中前一个子操作对象的编码相对于所述操作对象的编码起始地址的位置偏移量,确定该子操作对象的编码相对于所述起始地址的位置偏移量。
可选的,所述编码模块702还用于:若所述操作对象中执行了所述第一操作的子操作对象的顺序,为所述预设顺序中的首个,则将0作为该子操作对象的编码相对于所述操作对象的编码起始地址的位置偏移量。
可选的,所述编码模块702具体用于:将按M、位置偏移量部分、编码部分先后顺序组合的信息,作为所述操作对象的编码信息;所述位置偏移量部分为:所述操作对象中所有子操作对象的编码相对于所述操作对象的编码起始地址的位置偏移量,按照所述预设顺序的组合;所述编码部分为:所述操作对象中所有子操作对象的编码,按照所述预设顺序的组合。
如图8所示,为本申请实施例提供的一种解码装置的结构示意图。
一种解码装置,包括:获取模块801,用于获取第一解码对象相对于区块数据的第一起始地址的第一位置偏移量;所述第一解码对象为所述区块数据中至少两个解码对象中任意一个;解码模块802,用于根据所述第一位置偏移量,获取所述第一解码对象;若所述第一解码对象包括至少两个子解码对象,则所述第一解码对象还包括所述至少两个子解码对象中每个子解码对象相对于所述第一解码对象的第二起始地址的第二位置偏移量;以及用于根据所述至少两个子解码对象中每个子解码对象相对于所述第一解码对象的第二起始地址的第二位置偏移量,对所述第一解码对象进行解码。
可选的,所述解码模块802具体用于:将所述第一解码对象作为第一操作的操作对象,对所述第一解码对象按照所述第一操作进行解码;所述第一操作为:确定N,N为所述第一操作的操作对象包括的子操作对象个数;若N等于1,则对所述操作对象中唯一的子操作对象进行递归长度前缀RLP解码,获取该子操作对象的RLP解码;若N大于1,按照所述操作对象中子操作对象的预设顺序,对每个子操作对象,执行以下步骤:获取该子操作对象相对于所述操作对象的第三起始地址的第三位置偏移量,并根据该第三位置偏移量,获取该子操作对象;将该子操作对象作为所述第一操作的操作对象,对该子操作对象按照所述第一操作进行解码,获取该子操作对象的解码;若确定所述操作对象中存在未被解码的子操作对象,则返回所述获取该子操作对象相对于所述操作对象的所述第三起始地址的第三位置偏移量的步骤。
本申请实施例提供一种计算机设备,包括程序或指令,当所述程序或指令被执行时,如本申请实施例提供的一种编码方法及可选方法或者解码方法及可选方法被执行。
本申请实施例提供一种存储介质,包括程序或指令,当所述程序或指令被执行时,如本申请实施例提供的一种编码方法及可选方法或者解码方法及可选方法被执行。
最后应说明的是:本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、光学存储器等)上实施的计算机程序产品的形式。
本申请是参照根据本申请的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
显然,本领域的技术人员可以对本申请进行各种改动和变型而不脱离本申请的范围。这样,倘若本申请的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本申请也意图包含这些改动和变型在内。
Claims (12)
1.一种编码方法,其特征在于,包括:
获取编码对象;
将所述编码对象作为第一操作的操作对象,对所述编码对象按照所述第一操作进行编码;所述第一操作为:
确定M,M为所述第一操作的操作对象包括的子操作对象个数;
若M等于1,则对所述操作对象中唯一的子操作对象进行递归长度前缀RLP编码,获取该子操作对象的RLP编码;
若M大于1,按照所述操作对象中子操作对象的预设顺序,对每个子操作对象,执行以下步骤:
将该子操作对象作为所述第一操作的操作对象,对该子操作对象按照所述第一操作进行编码,获取该子操作对象的编码;
确定该子操作对象的编码相对于所述操作对象的编码起始地址的位置偏移量;
若确定所述操作对象中存在未被编码的子操作对象,则返回所述将该子操作对象作为所述第一操作的操作对象的步骤;否则,根据所述操作对象中每个子操作对象的编码,以及该子操作对象相对于所述起始地址的位置偏移量,确定所述操作对象的编码信息。
2.如权利要求1所述的方法,其特征在于,所述确定该子操作对象的编码相对于所述操作对象的编码起始地址的位置偏移量,包括:
若所述操作对象中执行了所述第一操作的子操作对象的顺序,不为所述预设顺序中的首个,则根据该子操作对象在所述预设顺序中前一个子操作对象编码的编码长度,以及该子操作对象在所述预设顺序中前一个子操作对象的编码相对于所述操作对象的编码起始地址的位置偏移量,确定该子操作对象的编码相对于所述起始地址的位置偏移量。
3.如权利要求2所述的方法,其特征在于,所述确定该子操作对象的编码相对于所述操作对象的编码起始地址的位置偏移量,还包括:
若所述操作对象中执行了所述第一操作的子操作对象的顺序,为所述预设顺序中的首个,则将0作为该子操作对象的编码相对于所述操作对象的编码起始地址的位置偏移量。
4.如权利要求1-3任一所述的方法,其特征在于,所述根据所述操作对象中每个子操作对象的编码,以及该子操作对象相对于所述起始地址的位置偏移量,确定所述操作对象的编码信息,包括:
将按M、位置偏移量部分、编码部分先后顺序组合的信息,作为所述操作对象的编码信息;所述位置偏移量部分为:所述操作对象中所有子操作对象的编码相对于所述操作对象的编码起始地址的位置偏移量,按照所述预设顺序的组合;所述编码部分为:所述操作对象中所有子操作对象的编码,按照所述预设顺序的组合。
5.一种解码方法,其特征在于,包括:
获取第一解码对象相对于区块数据的第一起始地址的第一位置偏移量;所述第一解码对象为所述区块数据中至少两个解码对象中任意一个;
根据所述第一位置偏移量,获取所述第一解码对象;若所述第一解码对象包括至少两个子解码对象,则所述第一解码对象还包括所述至少两个子解码对象中每个子解码对象相对于所述第一解码对象的第二起始地址的第二位置偏移量;
将所述第一解码对象作为第一操作的操作对象,对所述第一解码对象按照所述第一操作进行解码;所述第一操作为:
确定N,N为所述第一操作的操作对象包括的子操作对象个数;
若N等于1,则对所述操作对象中唯一的子操作对象进行递归长度前缀RLP解码,获取该子操作对象的RLP解码;
若N大于1,按照所述操作对象中子操作对象的预设顺序,对每个子操作对象,执行以下步骤:
获取该子操作对象相对于所述操作对象的第三起始地址的第三位置偏移量,并根据该第三位置偏移量,获取该子操作对象;
将该子操作对象作为所述第一操作的操作对象,对该子操作对象按照所述第一操作进行解码,获取该子操作对象的解码;
若确定所述操作对象中存在未被解码的子操作对象,则返回所述获取该子操作对象相对于所述操作对象的所述第三起始地址的第三位置偏移量的步骤。
6.一种编码装置,其特征在于,包括:
获取模块,用于获取编码对象;
编码模块,用于将所述编码对象作为第一操作的操作对象,对所述编码对象按照所述第一操作进行编码;所述第一操作为:确定M,M为所述第一操作的操作对象包括的子操作对象个数;
以及用于若M等于1,则对所述操作对象中唯一的子操作对象进行递归长度前缀RLP编码,获取该子操作对象的RLP编码;若M大于1,按照所述操作对象中子操作对象的预设顺序,对每个子操作对象,执行以下步骤:将该子操作对象作为所述第一操作的操作对象,对该子操作对象按照所述第一操作进行编码,获取该子操作对象的编码;确定该子操作对象的编码相对于所述操作对象的编码起始地址的位置偏移量;若确定所述操作对象中存在未被编码的子操作对象,则返回所述将该子操作对象作为所述第一操作的操作对象的步骤;否则,根据所述操作对象中每个子操作对象的编码,以及该子操作对象相对于所述起始地址的位置偏移量,确定所述操作对象的编码信息。
7.如权利要求6所述的装置,其特征在于,所述编码模块具体用于:
若所述操作对象中执行了所述第一操作的子操作对象的顺序,不为所述预设顺序中的首个,则根据该子操作对象在所述预设顺序中前一个子操作对象编码的编码长度,以及该子操作对象在所述预设顺序中前一个子操作对象的编码相对于所述操作对象的编码起始地址的位置偏移量,确定该子操作对象的编码相对于所述起始地址的位置偏移量。
8.如权利要求7所述的装置,其特征在于,所述编码模块还用于:
若所述操作对象中执行了所述第一操作的子操作对象的顺序,为所述预设顺序中的首个,则将0作为该子操作对象的编码相对于所述操作对象的编码起始地址的位置偏移量。
9.如权利要求6-8任一所述的装置,其特征在于,所述编码模块具体用于:
将按M、位置偏移量部分、编码部分先后顺序组合的信息,作为所述操作对象的编码信息;所述位置偏移量部分为:所述操作对象中所有子操作对象的编码相对于所述操作对象的编码起始地址的位置偏移量,按照所述预设顺序的组合;所述编码部分为:所述操作对象中所有子操作对象的编码,按照所述预设顺序的组合。
10.一种解码装置,其特征在于,包括:
获取模块,用于获取第一解码对象相对于区块数据的第一起始地址的第一位置偏移量;所述第一解码对象为所述区块数据中至少两个解码对象中任意一个;
解码模块,用于根据所述第一位置偏移量,获取所述第一解码对象;若所述第一解码对象包括至少两个子解码对象,则所述第一解码对象还包括所述至少两个子解码对象中每个子解码对象相对于所述第一解码对象的第二起始地址的第二位置偏移量;
以及用于根据所述至少两个子解码对象中每个子解码对象相对于所述第一解码对象的第二起始地址的第二位置偏移量,对所述第一解码对象进行解码;
所述解码模块具体用于:
将所述第一解码对象作为第一操作的操作对象,对所述第一解码对象按照所述第一操作进行解码;所述第一操作为:
确定N,N为所述第一操作的操作对象包括的子操作对象个数;
若N等于1,则对所述操作对象中唯一的子操作对象进行递归长度前缀RLP解码,获取该子操作对象的RLP解码;
若N大于1,按照所述操作对象中子操作对象的预设顺序,对每个子操作对象,执行以下步骤:
获取该子操作对象相对于所述操作对象的第三起始地址的第三位置偏移量,并根据该第三位置偏移量,获取该子操作对象;
将该子操作对象作为所述第一操作的操作对象,对该子操作对象按照所述第一操作进行解码,获取该子操作对象的解码;
若确定所述操作对象中存在未被解码的子操作对象,则返回所述获取该子操作对象相对于所述操作对象的所述第三起始地址的第三位置偏移量的步骤。
11.一种计算机设备,其特征在于,包括程序或指令,当所述程序或指令被执行时,如权利要求1至5中任意一项所述的方法被执行。
12.一种存储介质,其特征在于,包括程序或指令,当所述程序或指令被执行时,如权利要求1至5中任意一项所述的方法被执行。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910343404.3A CN110096624B (zh) | 2019-04-26 | 2019-04-26 | 一种编解码方法、装置、计算机设备及存储介质 |
PCT/CN2020/080712 WO2020215951A1 (zh) | 2019-04-26 | 2020-03-23 | 一种编解码方法、装置、计算机设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910343404.3A CN110096624B (zh) | 2019-04-26 | 2019-04-26 | 一种编解码方法、装置、计算机设备及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110096624A CN110096624A (zh) | 2019-08-06 |
CN110096624B true CN110096624B (zh) | 2023-03-21 |
Family
ID=67445881
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910343404.3A Active CN110096624B (zh) | 2019-04-26 | 2019-04-26 | 一种编解码方法、装置、计算机设备及存储介质 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN110096624B (zh) |
WO (1) | WO2020215951A1 (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110096624B (zh) * | 2019-04-26 | 2023-03-21 | 深圳前海微众银行股份有限公司 | 一种编解码方法、装置、计算机设备及存储介质 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6232984B1 (en) * | 1997-05-22 | 2001-05-15 | Lucent Technologies, Inc. | Data visualization system |
JP2005159787A (ja) * | 2003-11-27 | 2005-06-16 | Sony Corp | 画像処理装置、および画像処理方法、並びにコンピュータ・プログラム |
WO2016095241A1 (zh) * | 2014-12-17 | 2016-06-23 | 深圳Tcl数字技术有限公司 | 选择视频编解码硬件平台的方法及装置 |
CN106716998A (zh) * | 2016-12-26 | 2017-05-24 | 深圳前海达闼云端智能科技有限公司 | 多操作系统多媒体数据编解码方法、装置、电子设备和计算机程序产品 |
WO2018119955A1 (zh) * | 2016-12-29 | 2018-07-05 | 深圳前海达闼云端智能科技有限公司 | 跨系统多媒体数据编解码方法、装置、电子设备和计算机程序产品 |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
TWI222328B (en) * | 2003-01-15 | 2004-10-11 | Cheerteck Inc | Method and apparatus of recording compression encode table in pseudo read-only memory |
CN107153588A (zh) * | 2017-05-12 | 2017-09-12 | 成都优孚达信息技术有限公司 | 数据编码存储方法 |
CN109104198A (zh) * | 2018-06-28 | 2018-12-28 | 郑州云海信息技术有限公司 | 一种数据压缩方法、解压方法、装置及电子设备 |
CN109582653B (zh) * | 2018-11-14 | 2020-12-08 | 网易(杭州)网络有限公司 | 文件的压缩、解压缩方法及设备 |
CN110096624B (zh) * | 2019-04-26 | 2023-03-21 | 深圳前海微众银行股份有限公司 | 一种编解码方法、装置、计算机设备及存储介质 |
-
2019
- 2019-04-26 CN CN201910343404.3A patent/CN110096624B/zh active Active
-
2020
- 2020-03-23 WO PCT/CN2020/080712 patent/WO2020215951A1/zh active Application Filing
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6232984B1 (en) * | 1997-05-22 | 2001-05-15 | Lucent Technologies, Inc. | Data visualization system |
JP2005159787A (ja) * | 2003-11-27 | 2005-06-16 | Sony Corp | 画像処理装置、および画像処理方法、並びにコンピュータ・プログラム |
WO2016095241A1 (zh) * | 2014-12-17 | 2016-06-23 | 深圳Tcl数字技术有限公司 | 选择视频编解码硬件平台的方法及装置 |
CN106716998A (zh) * | 2016-12-26 | 2017-05-24 | 深圳前海达闼云端智能科技有限公司 | 多操作系统多媒体数据编解码方法、装置、电子设备和计算机程序产品 |
WO2018119955A1 (zh) * | 2016-12-29 | 2018-07-05 | 深圳前海达闼云端智能科技有限公司 | 跨系统多媒体数据编解码方法、装置、电子设备和计算机程序产品 |
Also Published As
Publication number | Publication date |
---|---|
WO2020215951A1 (zh) | 2020-10-29 |
CN110096624A (zh) | 2019-08-06 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103997346B (zh) | 一种基于流水线的数据匹配方法和装置 | |
CN109145158B (zh) | 一种布隆过滤器中数据的处理方法以及布隆过滤器 | |
RU2629440C2 (ru) | Устройство и способ для ускорения операций сжатия и распаковки | |
CN110557124B (zh) | 一种数据压缩方法及装置 | |
CN111444196B (zh) | 块链式账本中全局状态的哈希的生成方法、装置及设备 | |
JP2014507732A (ja) | グループ形式を用いた可変長データの改良型符号化および復号 | |
JP2009542092A5 (zh) | ||
CN114064984B (zh) | 一种基于稀疏数组链表的世界状态增量更新方法及装置 | |
CN112785408A (zh) | 基于哈希的对账方法及装置 | |
US9100042B2 (en) | High throughput decoding of variable length data symbols | |
CN110096624B (zh) | 一种编解码方法、装置、计算机设备及存储介质 | |
CN112433986A (zh) | 数据的存储方法、电子设备以及计算机可读存储介质 | |
CN107153506A (zh) | 基于再生码的分布式存储系统与处理方法 | |
CN113744062B (zh) | 在区块链中执行交易的方法、区块链节点和区块链 | |
CN105791832B (zh) | 数据编码方法和数据解码方法及其系统 | |
CN114168159A (zh) | 智能合约部署方法、交易方法、装置及电子设备 | |
CN113744063A (zh) | 区块链中执行交易的方法及装置 | |
CN111026736B (zh) | 数据血缘管理方法及装置、数据血缘解析方法及装置 | |
CN106293542B (zh) | 一种文件解压缩的方法及装置 | |
CN109756231B (zh) | 循环移位处理装置及方法 | |
CN110515591B (zh) | 基于区块链的随机数生成方法及装置 | |
CN113495901B (zh) | 一种面向可变长数据块的快速检索方法 | |
CN115276889A (zh) | 解码处理方法、装置、计算机设备及存储介质 | |
CN112433672A (zh) | 一种固态硬盘读方法和装置 | |
CN108038158A (zh) | 减少数据库存储容量的数据存储方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |