CN108322220A - 编解码方法、装置及编解码设备 - Google Patents
编解码方法、装置及编解码设备 Download PDFInfo
- Publication number
- CN108322220A CN108322220A CN201810133325.5A CN201810133325A CN108322220A CN 108322220 A CN108322220 A CN 108322220A CN 201810133325 A CN201810133325 A CN 201810133325A CN 108322220 A CN108322220 A CN 108322220A
- Authority
- CN
- China
- Prior art keywords
- string
- source
- target
- compressed
- data
- 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
- 238000000034 method Methods 0.000 title claims abstract description 72
- 238000004422 calculation algorithm Methods 0.000 claims abstract description 315
- 238000007906 compression Methods 0.000 claims abstract description 245
- 230000006835 compression Effects 0.000 claims abstract description 245
- 238000003860 storage Methods 0.000 claims description 34
- 238000004590 computer program Methods 0.000 claims description 12
- 230000008569 process Effects 0.000 abstract description 8
- 230000003044 adaptive effect Effects 0.000 abstract description 3
- 238000010586 diagram Methods 0.000 description 22
- 241000270322 Lepidosauria Species 0.000 description 20
- 230000006837 decompression Effects 0.000 description 18
- 230000001413 cellular effect Effects 0.000 description 10
- 238000010276 construction Methods 0.000 description 10
- WPWLFFMSSOAORQ-UHFFFAOYSA-N 5-bromo-4-chloro-3-indolyl acetate Chemical compound C1=C(Br)C(Cl)=C2C(OC(=O)C)=CNC2=C1 WPWLFFMSSOAORQ-UHFFFAOYSA-N 0.000 description 9
- 230000006870 function Effects 0.000 description 8
- 238000013144 data compression Methods 0.000 description 5
- 230000014509 gene expression Effects 0.000 description 5
- 230000005540 biological transmission Effects 0.000 description 4
- 238000012545 processing Methods 0.000 description 4
- 241001269238 Data Species 0.000 description 3
- 238000004364 calculation method Methods 0.000 description 2
- 230000008602 contraction Effects 0.000 description 2
- 238000013500 data storage Methods 0.000 description 2
- 238000013461 design Methods 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 230000009467 reduction Effects 0.000 description 2
- 239000004065 semiconductor Substances 0.000 description 2
- 239000007787 solid Substances 0.000 description 2
- 238000006467 substitution reaction Methods 0.000 description 2
- 238000002679 ablation Methods 0.000 description 1
- 230000008901 benefit Effects 0.000 description 1
- 230000007423 decrease Effects 0.000 description 1
- 230000001419 dependent effect Effects 0.000 description 1
- 238000000151 deposition Methods 0.000 description 1
- 238000009795 derivation Methods 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 235000013399 edible fruits Nutrition 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 230000014759 maintenance of location Effects 0.000 description 1
- 239000003550 marker Substances 0.000 description 1
- 239000000203 mixture Substances 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 238000000926 separation method Methods 0.000 description 1
- 238000012163 sequencing technique Methods 0.000 description 1
Classifications
-
- 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/3084—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction using adaptive string matching, e.g. the Lempel-Ziv method
- H03M7/3086—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction using adaptive string matching, e.g. the Lempel-Ziv method employing a sliding window, e.g. LZ77
-
- 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
-
- 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/60—General implementation details not specific to a particular type of compression
- H03M7/6064—Selection of Compressor
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Compression, Expansion, Code Conversion, And Decoders (AREA)
Abstract
本申请公开了一种编解码方法、装置及编解码设备,该方法包括:获取待压缩的源数据,根据所述待压缩的源数据确定源字符串以及描述信息;所述源字符串为所述源数据中不被压缩的字符串,所述描述信息用于描述被压缩的字符串与所述源字符串的对应关系;分别计算至少两种压缩算法编码所述描述信息所需占用的存储空间;选择所述至少两种压缩算法编码所述描述信息所需占用的存储空间中占用存储空间较小的压缩算法作为目标算法;使用所述目标算法对所述源数据进行压缩编码,得到压缩数据。在压缩编码过程中自适应地选择所需占用的存储空间较小的压缩算法对所述源数据进行压缩编码,提高压缩比。
Description
技术领域
本发明涉及数据处理技术领域,尤其涉及一种编解码方法、装置及编解码设备。
背景技术
数据压缩是指在不丢失信息的前提下,缩减数据量以减少存储空间,提高其传输、存储和处理效率的一种技术方法。或者,按照一定的算法对数据进行重新组织,减少数据的冗余和存储的空间。数据压缩包括有损压缩和无损压缩。无损压缩可以完全无损还原压缩前的数据,编码开销相对于有损压缩较小,一般用于桌面文字区域的压缩。
在无损压缩领域中,于1977年诞生的Lz77字典编码算法是一个里程碑式事件。Lz77编码是一种开源的字典压缩算法,属于无损压缩。如今,Lz77算法已被广泛应用于各种数据压缩处理领域,由其派生的各种压缩算法也层出不穷,但都是属于Lz77算法这一大类。Lz77的衍生算法(如Lzss、Lzo、Lz4)以及组合算法(zlib、Lzma、zstd)等被广泛应用于数据存储、带宽传输等方面。随着互联网、物联网的飞速发展,数据文件规模越来越大,人们更需要提高数据的压缩比,减少数据占用的存储空间和传输所需的时间。
当前,采用的方案是利用预先设置的压缩算法对待压缩数据进行压缩编码。举例来说,编解码装置预先设置采用Lz4压缩算法对待压缩数据进行压缩编码。由于不同的压缩算法采用的压缩编码规则不同。因此,采用不同的压缩算法编码同一待压缩数据,所需占用的存储空间不同,即得到的压缩数据的压缩比不同。在当前采用的技术方案中,预先设置的压缩算法难以保证对任意一个待压缩数据进行压缩均获得较优的压缩比,即占用的存储空间均较小。
发明内容
本申请提供一种编解码方法,可保证对任意一个待压缩数据进行压缩编码均获得较优的压缩比,减少占用的存储空间。
第一方面,本申请提供了一种编解码方法,该方法包括:
获取待压缩的源数据;根据该待压缩的源数据确定源字符串和描述信息,该源字符串为该源数据中不被压缩的字符串,该描述信息用于描述被压缩的字符串与该源字符串的对应关系;选择预置的多种压缩算法中编码该描述信息所需占用的存储空间较小的压缩算法作为目标算法,使用该目标算法对该源字符串和该描述信息进行压缩编码,得到压缩数据。
该待压缩的源数据包含的字符串可以分为两种:一种是可被压缩的字符串,即在源数据中非首次出现需要被压缩的字符串;另一种是不能被压缩的字符串,即在源数据中首次出现且不需要被压缩的字符串。该源数据中可被压缩的字符串可以为该源数据中非首次出现的且长度超过阈值的字符串,该阈值可以是3、4、5、6等。字符串的长度是指字符串包含的字符个数。阈值是指被压缩的字符串包含的最少字符个数,即被压缩字符的最小长度。该源数据中不能被压缩的字符串可以为首次出现的字符串和/或未超过该阈值的字符串。
本申请中,选择编码描述信息所需占用的存储空间中占用存储空间较小的压缩算法作为目标算法;使用该目标算法对该源数据进行压缩编码,得到压缩数据;可以在压缩编码过程中自适应地选择所需占用的存储空间较小的压缩算法对该源数据进行压缩编码,减小所需占用的存储空间,提高压缩比。
在一种可选的实现方式中,对源数据进行压缩编码得到的压缩数据包含指示字段,该指示字段指示该目标算法。也就是说,该指示字段用于指示编码该源数据所采用的压缩算法。
本申请通过指示字段指示编码源数据所采用的压缩算法,以便于在解压该源数据压缩编码得到的压缩数据的时,采用该压缩算法对应的解压算法进行解压,提高解压效率。
在另一种可选的实现方式中,该描述信息包含目标字段;该目标字段用于描述目标字符串与源字符串的对应关系,该目标字符串属于被压缩的字符串;该目标字段包含第一数值、第二数值以及第三数值;该第一数值表示该目标字符串与该源字符串的位置关系;该第二数值表示该目标字符串在该源字符串中的起始位置;该第三数值表示该目标字符串的长度。
可以理解,该描述信息可以包含一个或者多个(包括两个)字段,每个字段描述一个被压缩的字符串和该源字符串的对应关系。该源字符串为该源数据中不能被压缩编码的字符串。该源字符串可以为该源数据中首次出现的字符串和/或长度未超过该阈值的字符串。该源数据中位于该目标字符串之前的字符串包含该目标字符串,即该目标字符串为该源数据中非首次出现的字符串。可选地,该目标字符串的长度超过该阈值。一类词典编码的基本思想是查找正在被压缩的字符串是否在之前输入的待压缩数据中出现过;如果是,则用与之前出现过的字符串相关的描述信息代替重复出现的字符串。例如,Lz4无损压缩算法采用“偏移值-匹配长度”,即<offset,length>来代替之前出现的字符串,再以特定的无歧义形式在码流中表示出来。举例来说,采用Lz4无损压缩算法进行压缩编码,待压缩的源数据为AAAABCDAAAA,阈值为4;该源数据中重复出现的字符串为AAAA,对应的偏移值和匹配长度为<7,4>;该源数据可以表示为AAAABCD<7,4>,前面的“AAAABCD”为该源数据中的源字符串,<7,4>可以为描述信息,通过该描述信息和该源字符串可以得到“AAAA”。
本申请提供的压缩编码的基本思想可以是利用与源数据中的源字符串相关的描述信息替代重复出现的字符串。该目标字段用于描述目标字符串与该源字符串的对应关系,通过该源字符串和该目标字段可以解码得到该目标字符串。
本申请中,利用目标字段描述目标字符串与源字符串的对应关系,以便于利用该目标字段和该源字符串准确地确定该目标字符串,编码效率高。
在另一种可选的实现方式中,在确定该源字符串以及该描述信息后,可以执行如下操作实现对该源数据的压缩编码:
分别存储该源字符串和该描述信息;从该描述信息中获取该目标字段;从该源字符串中获取第一字符串;该第一字符串为该源数据中该目标字符串相邻的字符串且位于该目标字符串之前;采用该目标算法依据该第一数值、该第二数值、该第三数值以及该第一字符串生成第一数据片段的压缩数据,该第一数据片段包含该第一字符串和该目标字符串。
该描述信息可以包含该源数据中两个或者两个以上被压缩的字符串对应的描述信息,每个被压缩的字符串对应一个描述信息。也就是说,该描述信息至少包含一个被压缩的字符串对应的描述信息。
本申请中,利用目标字段和源字符串可以快速地生成第一数据片段的压缩数据,实现简单,编码效率高。
在另一种可选的实现方式中,在确定该源字符串以及该描述信息后,可以执行如下操作实现对该源数据的压缩编码:
将该目标字段和第二字符串存储为一个信息,得到目标信息,该第二字符串为该源数据中该目标字符串相邻的字符串且位于该目标字符串之前;获取该目标信息;采用该目标算法依据该第一数值、该第二数值、该第三数值以及该第二字符串生成第二数据片段的压缩数据;该第二数据片段包含该第二字符串和该目标字符串。
本申请中,利用目标字段可以快速地生成第二数据片段的压缩数据,实现简单,可以节省编码时间。
在另一种可选的实现方式中,所述使用所述目标算法对所述源数据进行压缩编码,得到压缩数据之后,所述方法还包括:
解析所述压缩数据,得到所述指示字段指示的所述目标算法;
利用所述目标算法对应的解压算法对所述压缩数据进行解压,得到所述源数据。
本申请通过解析压缩数据的指示字段确定解压该压缩数据所需采用的解压算法,可以准确、快速地完成解压操作。
在另一种可选的实现方式中,确定源字符串以及目标字段的具体方式如下:
按照位于该源数据中的前后顺序依次获取该源数据中首次出现的字符串,得到该源字符串;采用哈希算法搜索该源数据中与该目标字符串相匹配的字符串;在搜索到与该目标字符串相匹配的字符串的情况下,确定该目标字符串为可被压缩编码的字符串;获得该第一数值、该第二数值以及该第三数值,生成该目标字段。
本申请采用哈希算法搜索源数据中可被编码的字符串,并生成相应的描述信息,时间开销小。
第二方面,本申请提供了一种编解码装置,该编解码装置包括:
获取单元,用于获取待压缩的源数据;
确定单元,用于根据该待压缩的源数据确定源字符串以及描述信息;该源字符串为该源数据中不被压缩的字符串,该描述信息用于描述被压缩的字符串与该源字符串的对应关系;
计算单元,用于分别计算至少两种压缩算法编码该描述信息所需占用的存储空间;
选择单元,用于选择该至少两种压缩算法编码该描述信息所需占用的存储空间中占用存储空间较小的压缩算法作为目标算法;
编码单元,用于使用该目标算法对该源数据进行压缩编码,得到压缩数据。
本申请通过在对源数据进行压缩编码之前,选择编码该源数据所需占用的存储空间较小的目标算法;并使用该目标算法对该源数据进行压缩编码;可以在不显著增加编码时间的条件下,明显提高压缩比,减小占用的存储空间。
在一种可选的实现方式中,该压缩数据包含指示字段,该指示字段指示该目标算法。
本申请通过指示字段指示编码源数据所采用的压缩算法,以便于在解压该源数据压缩编码得到的压缩数据的时,采用该压缩算法对应的解压算法进行解压,提高解压效率。
在另一种可选的实现方式中,该描述信息包含目标字段;该目标字段用于描述目标字符串与该源字符串的对应关系,该目标字符串属于被压缩的字符串;该目标字段包含第一数值、第二数值以及第三数值;该第一数值表示该目标字符串与该源字符串的位置关系;该第二数值表示该目标字符串在该源字符串中的起始位置;该第三数值表示该目标字符串的长度。
本申请中,利用目标字段描述目标字符串与源字符串的对应关系,以便于利用该目标字段和该源字符串准确地确定该目标字符串,编码效率高。
在另一种可选的实现方式中,该编解码装置还包括:
第一存储单元,用于分别存储该源字符串和该描述信息;
该编码单元,具体用于从该描述信息中获取该目标字段;从该源字符串中获取第一字符串;该第一字符串为该源数据中该目标字符串相邻的字符串且位于该目标字符串之前;采用该目标算法依据该第一数值、该第二数值、该第三数值以及该第一字符串生成第一数据片段的压缩数据,该第一数据片段包含该第一字符串和该目标字符串。
本申请中,利用目标字段和源字符串可以快速地生成第一数据片段的压缩数据,实现简单,编码效率高。
在另一种可选的实现方式中,该编解码装置还包括:
第二存储单元,用于将该目标字段和第二字符串存储为一个信息,得到目标信息;该第二字符串为该源数据中该目标字符串相邻的字符串且位于该目标字符串之前;
该编码单元,具体用于获取该目标信息;采用该目标算法依据该第一数值、该第二数值、该第三数值以及该第二字符串生成第二数据片段的压缩数据;该第二数据片段包含该第二字符串和该目标字符串。
本申请中,利用目标字段可以快速地生成第二数据片段的压缩数据,实现简单,可以节省编码时间。
在另一种可选的实现方式中,所述编解码装置还包括:
解析单元,用于解析所述压缩数据,得到所述指示字段指示的所述目标算法;
解码单元,用于利用所述目标算法对应的解压算法对所述压缩数据进行解压,得到所述源数据。
本申请通过解析压缩数据的指示字段确定解压该压缩数据所需采用的解压算法,可以准确、快速地完成解压操作。
在另一种可选的实现方式中,该获取单元,具体用于按照位于该源数据中的前后顺序依次获取该源数据中首次出现的字符串,得到该源字符串;采用哈希算法搜索该源数据中与该目标字符串相匹配的字符串;在搜索到与该目标字符串相匹配的该参考字符串的情况下,确定该目标字符串为可被压缩编码的字符串;生成该目标字段。
本申请采用哈希算法搜索源数据中可被编码的字符串,并生成相应的描述信息,时间开销小。
第三方面,本申请提供一种编解码设备,包括处理器和存储器,所述处理器和存储器相互连接,其中,所述存储器用于存储计算机程序,所述计算机程序包括程序指令,所述处理器被配置用于调用所述程序指令,执行上述第一方面及第一方面的任意一种可选的实现方式的方法。
本申请中,编解码设备可以从预先设置的多种压缩算法中选择编码源数据所需占用的存储空间较小的压缩算法对该源数据进行压缩编码,减小所需占用的存储空间,提高压缩比。
第四方面,本申请提供了一种计算机可读存储介质,所述计算机存储介质存储有计算机程序,所述计算机程序包括程序指令,所述程序指令当被处理器执行时使所述处理器执行上述第一方面及第一方面的任意一种可选的实现方式的方法。
本申请中,可以在压缩编码过程中自适应地选择编码源数据所需占用的存储空间较小的压缩算法对该源数据进行压缩编码,达到减小占用的存储空间以及提高压缩比的目的。
本申请在上述各方面提供的实现方式的基础上,还可以进行进一步组合以提供更多实现方式。
附图说明
图1为Lz4压缩算法采用的码流单元结构示意图;
图2是采用Lz4压缩算法生成的一种码流单元结构示意图;
图3是采用data-shrinker压缩算法生成的一种码流单元结构示意图;
图4是采用Lizard压缩算法生成的一种码流单元结构示意图;
图5是现有技术中的编码流程示意图;
图6为本申请提供的一种编解码方法流程示意图;
图7是采用Lz4压缩算法生成的另一种码流单元结构示意图;
图8是采用Lz4压缩算法生成的又一种码流单元结构示意图;
图9是采用Lz4压缩算法生成的又一种码流单元结构示意图;
图10为本申请提供的另一种编解码方法流程示意图;
图11是本申请提供的一种编解码装置结构示意图;
图12是本申请提供的一种编解码设备结构示意图。
具体实施方式
为了更好介绍本发明实施例,首先介绍一下与本发明相关的传统的压缩算法的实现方式:
(一)Lz4无损压缩算法
Lz4无损压缩算法是Lz77压缩算法衍生的一种无损压缩算法。Lz4无损压缩算法的压缩原理与Lz77压缩算法的压缩原理完全相同,就是采用“偏移值-匹配长度”,即<offset,length>来代替曾经出现的符号,再以特定的无歧义形式表示出来。例如,待压缩的数据为AAAABCDAAAA,表示为AAAABCD<7,4>;其中,<7,4>代替该待压缩的数据中后面的“AAAA”。AAAABCD<7,4>可以理解为该待压缩的数据对应的编码信息的一种表示形式。
采用Lz4无损压缩算法对待压缩的源数据进行压缩编码,首先需要获取偏移值、匹配长度、字符长度以及源字符串;再将获取的偏移值、匹配长度、字符长度以及源字符串采用特定的形式写入码流。采用特定的形式写入码流是指采用Lz4无损压缩算法对应的压缩编码规则编码获取的偏移值、匹配长度、字符长度以及源字符串,得到相应的码流单元。编码得到的一个个码流单元形成码流。在采用压缩算法对待压缩的源数据进行压缩编码的过程中,会依次生成多个码流单元,每个码流单元对应该源数据中一个数据片段的压缩数据,这些依次生成的码流单元可以理解为码流。可以理解,待压缩的源数据包含多个数据片段,每个码流单元对应一个数据片段的压缩数据。对待压缩的源数据进行压缩编码的过程就是对各个数据片段进行压缩编码,得到各个数据片段对应的码流单元的过程。该偏移值表示匹配数据的起始位置,即被压缩的字符串在该源字符串中的起始位置。该匹配数据为该源字符串中与该被压缩的字符串相同的字符串。例如,假定源数据为“AAAABCDAAAA”,该源数据中倒数四位的“AAAA”为被压缩的字符串,该源数据中第一至第四个字节中的“AAAA”为匹配数据,偏移值为7,即Offset=7,该偏移值表示从被压缩的字符串的起始位置向前7个字节为该匹配数据的起始位置。该匹配长度为该匹配数据的长度,也是被压缩的字符串的长度。由于该匹配数据为“AAAA”,该匹配长度为4,即Match length=4,表示匹配数据的长度为4个字节。该字符长度表示被压缩的字符串前面相邻的不能被压缩编码的字符串的长度。该字符长度为7,即Literal length=7,表示被压缩的字符串前面相邻的7个字节不能被编码,即该源数据中“AAAABCD”不能被编码。该源字符串表示该源数据中未编码的字符串。该源字符串为“AAAABCD”,即Literals=AAAABCD,表示该源数据中7个未编码的字符串是“AAAABCD”。本申请中,匹配长度可以表示为Match length,字符长度可以表示为Literallength。
图1为Lz4压缩算法采用的码流单元结构示意图。如图1所示,第一字段101包含匹配长度和字符长度的全部或者部分信息,即Literal length和Match length的部分或全部信息,该第一字段占用一个字节;第二字段102表示该字符长度超过15字节的部分,若该字符长度未超过15字节,则该第二字段102不存在;第三字段103为未编码的字符串,即源字符串;第四字段104占用2字节,用来记录偏移值;第五字段105表示该匹配长度超过15字节的部分,若该匹配长度未超过15字节,则该第五字段105不存在。该第一字段可以表示为“Token”控制字节。可以理解,若字符长度超过15字节,则码流单元包含第二字段102,表示该字符长度超过15字节的部分;否者,该码流单元不包含第二字段102。若匹配长度超过15字节,则码流单元包含第五字段105,表示该匹配长度超过15字节的部分;否者,该码流单元不包含第五字段105。可以理解,若字符长度和匹配长度均未超过15字节,则该第一字段101包含匹配长度和字符长度的全部信息;否则,该第一字段101包含匹配长度和字符长度的部分信息,剩余的信息分别包含在该第五字段和该第二字段。具体生成码流的规则如下:
1、每一次生成“偏移值-匹配长度”,即<offset,length>时,新建一个“码流单元”,该码流单元以第一字段,即“Token”控制字节开始,该第一字段中包含匹配长度和字符长度的部分或全部信息,即Literal length和Match length的部分或全部信息。
1.1、若该字符长度小于15,即Literal length<15,则会被写入该第一字段的高4位,且后续不再有字节用来表示该字符长度,反之,该字符长度超过15字节的部分,会在该第二字段102采用前缀编码继续表示。
1.2、若该匹配长度小于15,即Match length<15,则会被写入该第一字段的低4位,其后续不再有字节用来表示该匹配长度;反之该匹配长度超过15字节的部分,会在该第五字段105采用前缀编码继续表示。
2、该第二字段102和第五字段105采用相同的前缀编码形式,即在超过15的基础上,每次超过255,就会增加1个0xFF字节,直到最后不足255,写入并结束。
3、该第三字段103会将未被编码的字符串原样输入。
可以理解,将源数据中的源字符串输入码流单元中,得到该第三字段103。也就是说,该第三字段103存储未被编码的字符串,即源字符串。
4、该第四字段104固定占用2字节,用来记录偏移值。
依据以上生成码流的规则,采用Lz4压缩算法对字符串“AAAABCDAAAA”进行压缩编码后,得到如图2所示的码流单元。图2为采用Lz4压缩算法对源数据进行压缩编码得到的一种码流单元结构示意图。如图2所示,201占用一个字节,高4位表示字符长度7,即Literallength=7,低4位表示字符长度4,即Match length=4;202存储未被编码的字符串,即源字符串“AAAABCD”;203固定占用两个字节,存储偏移值。在实际应用中,码流单元中以比特位表示各种形式的数据。图2中为了清楚的显示各个字段,将各个字段对应的比特位采用十六进制进行表示。
Lz4压缩算法的字节输出模型
匹配长度表示为Match length,字符长度表示为Literals length,偏移值表示为Offset。根据偏移值、匹配长度以及字符长度的写入规则,可以计算得到输出字节数,具体计算规则如下:
1)当Literals length<15且Match length<15时
输出字节数=1+0+Literals length+2+0。
2)当Literals length>=15且Match length<15时
输出字节数=1+(└(Literals length-15)/255┘+1)+Literals length+2+0。
3)当Literals length<15且Match length>=15时
输出字节数=1+0+Literals length+2+(└(Match length-15)/255┘+1)。
4)当Literals length>=15且Match length>=15时
输出字节数=1+(└(Literals length-15)/255┘+1)+Literals length+2+(└(Match length-15)/255┘+1);其中,“└x┘”是指取不超过x的最小整数。
通过Lz4压缩算法的字节输出模型可以准确、快速地计算出采用Lz4压缩算法编码源数据所需占用的存储空间。可以理解,在生成该偏移值、该匹配长度以及该字符长度对应的码流单元之前,利用该字节输出模型可以确定生成码流单元所需占用的存储空间。
(二)data-shrinker压缩算法
data-shrinker压缩算法是与Lz4类似的另一种开源无损压缩算法,其在码流单元的设计上与Lz4大致相同,不同点在于:
(1)包含匹配长度和字符长度的部分或全部信息的第一字段,即“Token”控制字节中的8比特由“4+4”变成“3+1+4”,分出来的1个比特用来表示第四字段占用一个字节还是2个字节,即Offset是1字节数据,还是2字节数据;该第四字段用于记录偏移值。
(2)该第四字段,即记录偏移值的字段,不再固定为2个字节。当偏移值小于256,即Offset<256时,占用1个字节表示该偏移值,反之占用2个字节表示该偏移值。
(3)字符长度的前缀编码方式变化,若该字符长度小于7,即Literal length<7,则会被写入该第一字段的高3位,且后续不再有字节用来表示该字符长度,反之,该字符长度超过7字节的部分,会在第二字段采用前缀编码继续表示。
(4)相对于Lz4压缩算法的码流写入过程,匹配长度与源字符串的写入顺序交换,即码流单元中第三字段和第五字段的顺序交互。
因此,例子中的字符串“AAAABCDAAAA”采用data-shrinker压缩算法进行压缩编码后,得到如图3所示的码流单元。如图3所示,301占用一个字节,高3位表示字符长度7,即Literal length,低4位表示字符长度4,即Matchlength,第四位为0,指示偏移值占用一个字节;302表示该匹配长度超过7字节的部分,即Literal length超过7字节的部分;303占用1个字节,存储偏移值;304存储未被编码的字符串,即源字符串“AAAABCD”。在实际应用中,该码流单元中以比特位表示各种形式的数据。图3中为了清楚地显示各个字段,将各个字段对应的比特位采用十六进制进行表示。
从编码结果上看,Lz4压缩算法与data-shrinker压缩算法获得的码流长度相当,data-shrinker压缩算法相对Lz4压缩算法而言存在如下缺点和优点:
1、第一字段中1个比特被挪用,即“Token”控制字节中一个比特被挪用,造成data-shrinker压缩算法对于字符长度的编码能力下降。例子中字符长度为7,即Literallength=7,Lz4压缩算法中只需要1字节就可以表示,但是在data-shrinker压缩算法中需要2字节表示。
2、在记录偏移值上,data-shrinker压缩算法的编码能力增强。例子中采用data-shrinker压缩算法进行压缩编码时没有造成Lz4压缩算法的字节浪费现象。对比图2和图3可以看出,采用data-shrinker压缩算法占用1个字节记录偏移值,采用Lz4压缩算法占用2个字节记录偏移值。
data-shrinker压缩算法的字节输出模型
类似地,可以得到data-shrinker压缩算法的字节输出模型,具体计算规则如下:
1)当Literals length<7且Match length<15且Offset<256时
输出字节数=1+0+1+0+Literals length。
2)当Literals length<7且Match length<15且Offset>=256时
输出字节数=1+0+2+0+Literals length。
3)当Literals length>=7且Match length<15且Offset<256时
输出字节数=1+(└(Literals length-7)/255┘+1)+1+0+Literals length。
4)当Literals length>=7且Match length<15且Offset>=256时
输出字节数=1+(└(Literals length-7)/255┘+1)+2+0+Literals length。
5)当Literals length<7且Match length>=15且Offset<256时
输出字节数=1+0+1+(└(Match length-15)/255┘+1)+Literals length。
6)当Literals length<7且Match length>=15且Offset>=256时
输出字节数=1+0+2+(└(Match length-15)/255┘+1)+Literals length。
7)当Literals length>=7且Match length>=15且Offset<256时
输出字节数=1+(└(Literals length-7)/255┘+1)+1+(└(Match length-15)/255┘+1)+Literals length。
8)当Literals length>=7且Match length>=15且Offset>=256时
输出字节数=1+(└(Literals length-7)/255┘+1)+2+(└(Match length-15)/255┘+1)+Literals length。
通过data-shrinker压缩算法的字节输出模型可以准确、快速地计算出采用data-shrinker压缩算法编码源数据所需占用的存储空间。可以理解,在生成该偏移值、该匹配长度以及该字符长度对应的码流单元之前,利用该data-shrinker压缩算法的字节输出模型可以确定出采用data-shrinker压缩算法编码源数据生成码流单元所需占用的存储空间。
(三)Lizard压缩算法
Lizard压缩算法(一度称为“Lz5”)是与Lz4压缩算法类似的另一种开源无损压缩算法。Lizard压缩算法与Lz4压缩算法相比,第一字段,即“Token”控制字节的设计更具有类似于“熵编码”的特性。熵编码即编码过程中按熵原理不丢失任何信息的编码。Lizard压缩算法与Lz4压缩算法主要有以下区别:
(1)“Token”控制字节中的8比特,前1-2位是熵编码前缀标记,分为如下3种形式:
第一种为1 OO LL MMM:
若偏移值在0-1023之间,则最高位为1;第二位和第三位与后面记录偏移值占用的一个字节连起来共计10比特,共同记录偏移值;第四位和第五位占用的2比特表示字符长度的前缀编码,即Literal length的前缀编码;第六位至第八位占用的3比特表示匹配长度的前缀编码,即Match length的前缀编码。“Token”控制字节占用一个字节,一个字节包含8个比特。
第二种为00 LLL MMM:
若偏移值在1024-65535之间,则最高2比特是00;编码过程中偏移值由两字节记录;第三位至第五位占用3比特表示字符长度的前缀编码,即Literal length的前缀编码;第六位至第八位占用的3比特表示匹配长度的前缀编码,即Match length的前缀编码。
第三种为01 LLL MMM:
若偏移值在65536-16777215之间,则最高2比特是01;编码过程中偏移值由3字节记录;第三位至第五位占用3比特表示字符长度的前缀编码,即Literal length的前缀编码;第六位至第八位占用的3比特表示匹配长度的前缀编码,即Match length的前缀编码。
(2)偏移值不再固定为2字节,由第一字段关联标记,即由“Token”控制字节关联标记,占用1-3字节。
(3)字符长度的前缀编码方式变化。
在“Token”控制字节为1 OO LL MMM的条件下,若该字符长度小于3,即Literallength<3,则会被写入“Token”控制字节的第四位和第五位,且后续不再有字节用来表示该字符长度,反之,该字符长度超过3字节的部分,会在“Literal length+”部分采用前缀编码继续表示;该“Literal length+”对应图1中的第二字段;
在“Token”控制字节不为1 OO LL MMM的条件下,若该字符长度小于7,即Literallength<7,则会被写入“Token”控制字节的第三位至第五位,且后续不再有字节用来表示该字符长度,反之,该字符长度超过7字节的部分,会在“Literal length+”部分采用前缀编码继续表示;
(4)匹配长度的前缀编码方式变化。
若该匹配长度小于7,即Match length<7,则会被写入“Token”控制字节的第六位至第八位,且后续不再有字节用来表示该匹配长度,反之,该匹配长度超过7字节的部分,会在“Match length+”部分采用前缀编码继续表示;该“Match length+”对应图1中的第五字段。
因此,例子中的字符串“AAAABCDAAAA”采用Lizard压缩算法进行压缩编码后,得到如图4所示的码流单元。如图4所示,第一字段401为“0x9C”,对应的8比特为“10011100”,第二位和第三位与后面记录偏移值占用的一个字节(404)连起来共计10比特,共同记录偏移值;第四位和第五位占用的2比特表示字符长度的前缀编码;第六位至第八位占用的3比特表示匹配长度的前缀编码;第二字段402表示字符长度超过3字节的部分,该第二字段402为“0x04”,对应的8比特为“00000100”;403表示未被编码的字符串,即源字符串;404占用一个字节,用于记录偏移值。在图4中,由该第一字段401的第二位至第三位占用的2比特以及404占用的8比特组成的10比特,表示偏移值7;由该第一字段401的第六位至第八位占用的3比特,即“100”,表示匹配长度4;由该第一字段401的第四位至第五位占用的2比特,即“11”,以及该第二字段402占用的8比特,即“00000100”之和表示字符长度7。
从编码结果上看,Lizard压缩算法与Lz4压缩算法、data-shrinker压缩算法获得的码流长度相当。但是,Lizard压缩算法的“Token”控制字节已经带有“熵编码”的特点,其码流的写法也较Lz4压缩算法、data-shrinker压缩算法更加复杂。Lizard压缩算法相比于Lz4压缩算法、data-shrinker压缩算法而言编码较慢;压缩比更高。在一般情况下,由于经常发生短匹配,偏移值、匹配长度以及字符长度均偏小,Lizard压缩算法编码待压缩的源数据占用的存储空间更小。
Lizard压缩算法的字节输出模型
类似地,可以得到Lizard压缩算法的字节输出模型,具体计算规则如下:
1)当Offset<1024,Literals length<3,Match Length<7时
输出字节数=1+0+1+0+Literals length。
2)当Offset<1024,Literals length>=3,Match Length<7时
输出字节数=1+(└(Literals length-3)/255┘+1)+1+0+Literals length。
3)当Offset<1024,Literals length<3,Match Length>=7时
输出字节数=1+0+1+(└(Match length-7)/255┘+1)+Literals length。
4)当Offset<1024,Literals length>=3,Match Length>=7时
输出字节数=1+(└(Literals length-3)/255┘+1)+1+(└(Match length-7)/255┘+1)+Literals length。
5)当1024<=Offset<65536,Literals length<7,Match Length<7时
输出字节数=1+0+2+0+Literals length。
6)当1024<=Offset<65536,Literals length>=7,Match Length<7时
输出字节数=1+(└(Literals length-7)/255┘+1)+2+0+Literals length。
7)当1024<=Offset<65536,Literals length<7,Match Length>=7时
输出字节数=1+0+2+(└(Match length-7)/255┘+1)+Literals length。
8)当1024<=Offset<65536,Literals length>=7,Match Length>=7时
输出字节数=1+(└(Literals length-7)/255┘+1)+2+(└(Match length-7)/255┘+1)+Literals length。
9)当Offset>=65536,Literals length<7,Match Length<7时
输出字节数=1+0+3+0+Literals length。
10)当Offset>=65536,Literals length>=7,Match Length<7时
输出字节数=1+(└(Literals length-7)/255┘+1)+3+0+Literals length。
11)当Offset>=65536,Literals length<7,MatchLength>=7时
输出字节数=1+0+3+(└(Match length-7)/255┘+1)+Literals length。
12)当Offset>=65536,Literals length>=7,Match Length>=7时
输出字节数=1+(└(Literals length-7)/255┘+1)+3+(└(Match length-7)/255┘+1)+Literals length。
通过Lizard压缩算法的字节输出模型可以准确、快速地计算出采用Lizard压缩算法编码源数据所需占用的存储空间。可以理解,在生成该偏移值、该匹配长度以及该字符长度对应的码流单元之前,利用该Lizard压缩算法的字节输出模型可以计算出采用Lizard压缩算法编码源数据生成码流单元所需占用的存储空间。通过字节输出模型计算压缩算法编码描述信息为本申请的一个发明点。在传统的压缩算法中,并不会计算编码描述信息或者源数据所需占用的存储空间。
上面介绍了传统的Lz4压缩算法、data-shrinker压缩算法以及Lizard压缩算法的编码规则、码流单元结构、字节输出模型等。传统的Lz4压缩算法、data-shrinker压缩算法以及Lizard压缩算法压缩不同类型的待压缩数据获得的压缩比均不是固定不变的。可以理解,不同的压缩算法编码源数据所需占用的存储空间可能不同,任何一种压缩算法都难以保证对任意一种源数据进行压缩编码均获得较高的压缩比。可以理解,采用在对源数据进行压缩编码之前,可以利用可采用的压缩算法对应的字节输出模型计算出编码该源数据所需占用的存储空间。下面介绍传统的压缩算法采用的编码流程,如图5所示,包括:
501、获取待压缩的源数据。
502、获取该源数据的源字符串和语义信息。
该获取该源数据的源字符串和语义信息可以是在遍历该源数据的过程中获取的。语义信息为被压缩的字符串对应的编码信息。例如,Lz4无损压缩算法中的偏移值和匹配长度。
503、编码源字符串和语义信息,得到码流单元。
504、判断是否完成压缩编码。
若是,执行502,若否,执行505。若该语义信息和该源字符串均完成压缩编码,则判断完成压缩编码。
505、停止压缩编码。
在一般情况下,Lz77系列的压缩算法,在遍历源数据的过程中,计算<偏移值,匹配长度>进而产生语义信息,然后通过规定的编码规则编码语义信息得到各个码流单元,各个码流单元形成码流。当源数据遍历完成,码流也就创建完成。从图5可以看出,当前采用的压缩编码方式是采用预置的压缩算法对源数据进行压缩编码,在完成压缩编码之前,不能确定编码该源数据所需占用的存储空间。由于一种压缩算法难以保证对任意类型的源数据进行压缩编码均获得较高的压缩比,导致编码某些类型的源数据时候需要占用较大的存储空间。
为了解决传统地编解码方法的压缩比低的问题,本申请提供一种编解码方法,其主要原理包括:在遍历源数据的过程中,根据待压缩的源数据确定源字符串和描述信息,并存储该源字符串和该描述信息;在编码该源数据之前,计算预置的至少两种压缩算法编码该描述信息所需占用的存储空间;选择所需占用的存储空间较小的压缩算法依据存储的该源字符串和该描述信息进行压缩编码,得到压缩数据。在对该源数据进行编码之前,可以精确计算各压缩算法编码该源数据所需占用的存储空间。因此,本申请可以根据各压缩算法所需占用的存储空间的大小进行比较,然后再根据业务需求择优选取存储空间占用较小的算法对待压缩数据进行压缩,从而提高待压缩数据的压缩比,节省存储空间,保证了压缩效果。
本发明实施例提供了一种编解码方法,如图6所示,包括:
601、获取待压缩的源数据,根据上述待压缩的源数据确定源字符串以及描述信息;上述源字符串为上述源数据中不被压缩的字符串,上述描述信息用于描述被压缩的字符串与上述源字符串的对应关系。
上述待压缩的源数据可以是文本数据、图像数据、音频数据等。被压缩的字符串可以是上述源数据中非首次出现的且长度超过阈值的字符串,上述阈值可以是3、4、5、6等。上述源字符串可以为上述源数据中首次出现的和/或长度未超过上述阈值的字符串。可以理解,通过上述描述信息和上述源字符串可以得到被压缩的字符串。本发明实施例中,利用上述描述信息代替重复出现的字符串,即被压缩的字符串用上述描述信息代替,进而实现对上述源数据的压缩编码。举例来说,待压缩的源数据为“AAAABCDAAAA”,阈值为4,则源字符串为“AAAABCD”,被压缩的字符串为该源数据中后面的“AAAA”,描述信息为(7,7,4)。其中,该描述信息中的第一个数值表示被压缩的字符串与该源字符串的位置关系,第二个数值表示被压缩的字符串在该源字符串中的起始位置,第三个数值表示被压缩的字符串的长度。可以看出,在源字符串的第7个字符之后为被压缩的字符串;从被压缩的字符串的起始位置向前7个字节为该被压缩的字符串在该源字符串中的起始位置,被压缩的字符串的长度为4。又举例来说,待压缩的源数据为“AAAABCDAAAABEFBCDAEFBC”,阈值为4,则源字符串为“AAAABCDEF”,被压缩的字符串依次为该源数据中第二次出现的“AAAAB”、“BCDA”以及“EFBC”,3个被压缩的字符串对应的3个描述信息依次为(7,7,5),(2,10,4),(0,6,4)。从上述例子可以看出,该源数据中的前7个字符首次出现,不能被压缩编码,属于源字符串;第一次出现的“EF”不能被编码,属于源字符串;因此源字符串为“AAAABCDEF”。从上述例子可以看出,在源字符串的第7个字符之后为该源数据中第二次出现的“AAAAB”,从该源数据中第二次出现的“AAAAB”的起始位置向前7个字节为该“AAAAB”在该源字符串中的起始位置,该源数据中第二次出现的“AAAAB”的长度为5;在源字符串的第(7+2)个字符之后为该源数据中第二次出现的“BCDA”,即源字符串中的“EF”之后为该“BCDA”,该源数据中第二次出现的“BCDA”的起始位置向前10个字节为该“BCDA”在该源字符串中的起始位置,该源数据中第二次出现的“BCDA”的长度为4;在源字符串的第(7+2+0)个字符之后为该源数据中第二次出现的“EFBC”,即该“EFBC”前面未相邻源字符串,该“EFBC”的起始位置向前6个字节为该“EFBC”在该源字符串中的起始位置,该源数据中第二次出现的“EFBC”的长度为4。上述描述信息中的第一个数值可以理解为被压缩的字符串前面相邻的源字符串的长度。上述例子中,源数据中第二次出现的“BCDA”相邻的源字符串为“EF”,该“BCDA”对应的描述信息的第一个数值为2,即该“EF”的长度;该源数据中第二次出现的“EFBC”未相邻源字符串,该“EFBC”对应的描述信息的第一个数值为0。
采用压缩算法编码上述源数据需要获得上述源数据的源字符串以及描述信息;对获得的上述源字符串以及上述描述信息进行编码,得到压缩数据。在实际应用中,可以采用多种方式获得上述源数据的源字符串以及描述信息,并且可以采用多种形式的描述信息描述被压缩的字符串与上述源字符串的对应关系。本发明实施例不限定获取源字符串和描述信息的方式,以及上述描述信息的具体形式。
本发明实施例提供了一种获取源数据的源字符串和描述信息的方法,上述获取上述源数据的源字符串以及描述信息包括:
按照位于上述源数据中的前后顺序依次获取上述源数据中首次出现的字符串,得到上述源字符串;
采用哈希算法搜索上述源数据中与上述目标字符串相匹配的字符串;
在搜索到与上述目标字符串相匹配的上述参考字符串的情况下,确定上述目标字符串为可被压缩编码的字符串;
获得第一数值、第二数值以及第三数值,生成上述目标字段;上述第一数值表示上述目标字符串与上述源字符串的位置关系;上述第二数值表示上述目标字符串在上述源字符串中的起始位置;上述第三数值表示上述目标字符串的长度。
本发明实施例中,可以采用哈希算法搜索上述源数据中的源字符串以及可被压缩的字符串。具体的,采用哈希算法计算上述源数据中各个字符串的哈希值,通过比较哈希值确定各个字符串的匹配情况,进而获得上述源字符串以及上述目标字段。下面以Lz4压缩算法中采用哈希算法搜索源数据中的源字符串以及可被压缩的字符串为例进行介绍:
(1)从源数据中取出4个字节。
例如4个字节的源数据为“AAAA”,A的ASCII码是0x41,AAAA就是0x41414141=1094795585。从该源数据中每次取出的字节个数等于阈值。本实施例中,被压缩字符串的阈值为4,即被压缩字符串的最小长度为4。
(2)乘以黄金分割素数。
1094795585*2654435761=2906064551808915185=0x28546A5018ECD6F1,其中,2654435761为黄金分割素数。
(3)取低32位的高13位作为关键码值。
0x18ECD6F1>>19=0x31D=797。“>>19”表示向右移动19位。“AAAA”的哈希值为797,即Hash(“AAAA”)=797。
(4)在一张存储数据地址的表的第797个位置查看是否已经存在有效地址,如果存在,哈希粗匹配成功,然后进一步去对比那个有效地址所对应的内容是否是“AAAA”;如果不存在,在该表的第797个位置存储“AAAA”的有效地址。
(5)在上述有效地址所对应的内容是“AAAA”的情况下,生成上述4个字节中的数据对应的描述信息。
可以理解,每次从源数据中取出4个字节,然后乘以4字节的黄金分割数(在0xFFFFFFFF*0.618黄金分割附近的素数),然后取高13位,作为输出的哈希值。可见,通过哈希算法可以快速地搜索出源字符串以及可被编码的字符串,提高编码效率。哈希算法的实现方式有多种,本发明实施例不作限定。
本发明实施例采用哈希算法搜索源数据中可被编码的字符串,并生成相应的描述信息,时间开销小。
602、分别计算至少两种压缩算法编码上述描述信息所需占用的存储空间。
上述至少两种压缩算法可以包含Lz4压缩算法、data-shrinker压缩算法、以及Lizard压缩算法等。编解码装置可以预置有上述至少两种压缩算法以及上述至少两种压缩算法分别对应的字节输出模型,例如Lz4压缩算法的字节输出模型、data-shrinker压缩算法的字节输出模型以及Lizard压缩算法的字节输出模型等。上述编解码装置可以是手机、电脑、平板电脑、以及其他可实现编解码功能的设备。本发明实施例不限定上述至少两种算法。通过上述至少两种压缩算法分别对应的字节输出模型可以分别计算上述至少两种压缩算法编码上述描述信息所需占用的存储空间。具体的,将上述描述信息对应的数值分别代入到上述至少两种压缩算法对应的字节输出模型进行计算,得到上述至少两种压缩算法编码上述描述信息所需占用的存储空间。
603、选择上述至少两种压缩算法编码上述描述信息所需占用的存储空间中占用存储空间较小的压缩算法作为目标算法。
上述至少两种压缩算法编码上述描述信息所需占用的存储空间中占用存储空间较小的压缩算法可以为上述至少两种压缩算法编码上述描述信息所需占用的存储空间中占用存储空间非最大的任一种压缩算法。也就是说,可以选择除所需占用的存储空间最大的压缩算法之外的任一种压缩算法为上述目标算法,例如选择上述至少两种压缩算法中编码上述描述信息所需占用的存储空间最小的压缩算法为上述目标算法。举例来说,第一压缩算法至第五压缩算法5种压缩算法中该第一压缩算法编码描述信息所需占用的存储空间最大,可以选择除该第一压缩算法之外的任一种压缩算法作为目标算法。
604、使用上述目标算法对上述源数据进行压缩编码,得到压缩数据。
所述使用上述目标算法对上述源数据进行压缩编码,得到压缩数据可以是采用所述目标算法对应的编码方式对所述源字符串以及所述描述信息进行压缩编码,得到上述源数据对应的压缩数据。可以理解,本发明实施例中,对于不同压缩算法,可以仅遍历一次源数据,得到所述源字符串和所述描述信息,并存储;在确定所述目标算法后,采用所述目标算法对应的编码方式编码所述源字符串和所述描述信息,得到上述源数据对应的压缩数据。在待压缩的源数据和阈值确定的情况下,该待压缩的源数据仅对应的一个确定的源字符串以及描述信息。也就是说,不同的压缩算法编码同一待压缩数据所依据的描述信息和源字符串是相同,每种压缩算法均可以根据该描述信息和该源字符串进行压缩编码,得到相应的压缩数据。也就是说,本发明实施例中,仅需要遍历一次源数据,得到描述信息和源字符串。
本发明实施例通过在对上述源数据进行压缩编码之前,选择编码上述源数据所需占用的存储空间较小的目标算法;并使用上述目标算法对上述源数据进行压缩编码;可以在不显著增加编码时间的条件下,明显提高压缩比。本发明实施例中,仅需计算上述至少两种压缩算法编码上述描述信息所需占用的存储空间,不需要采用上述目标算法之外的压缩算法执行编码操作,编码开销较小。
在一种可选的实现方式中,上述压缩数据包含指示字段,上述指示字段指示上述目标算法。
上述指示字段可以占用至少一个比特位指示上述目标算法。可以理解,上述指示字段对应的二进制序列不同,指示的压缩算法不同。举例来说,编解码装置预置有4种压缩算法,即可采用4种压缩算法中的任一种进行压缩编码,指示字段占用两个比特位,00指示第一压缩算法,01指示第二压缩算法,10指示第三压缩算法,11指示第四压缩算法;若目标算法为该第四压缩算法,则该指示字段为11。又举例来说,编解码装置预置有8种压缩算法,指示字段占用3个比特位,000指示第一压缩算法,001指示第二压缩算法,010指示第三压缩算法,011指示第四压缩算法,100指示第五压缩算法,101指示第六压缩算法,110指示第七压缩算法,111指示第八压缩算法;若目标算法为该第四压缩算法,则该指示字段为011。
本发明实施例通过指示字段指示编码源数据所采用的压缩算法,以便于在解压该源数据压缩编码得到的压缩数据的时,采用该压缩算法对应的解压算法进行解压,提高解压效率。
在一种可选的实现方式中,上述描述信息包含目标字段;上述目标字段用于描述目标字符串与上述源字符串的对应关系,上述目标字符串属于被压缩的字符串;上述目标字段包含第一数值、第二数值以及第三数值;上述第一数值表示上述目标字符串与上述源字符串的位置关系;上述第二数值表示上述目标字符串在上述源字符串中的起始位置;上述第三数值表示上述目标字符串的长度。
可以理解,通过上述目标字段和上述源字符串可以得到上述目标字符串。因此,可以利用上述目标字段代替上述目标字符串。上述第一数值表示上述目标字符串与上述源字符串的位置关系,通过上述第一数值可以确定上述目标字符串在上述源数据中的位置。通过上述第二数值和上述第三数值可以确定上述目标字符串。具体的,从上述第二数值指示的起始位置开始获取上述第三数值个上述源字符串中的字符,得到上述目标字符串。举例来说,待压缩的源数据为“AAAABCDAAAABEFBCDAEFBC”,阈值为4,则源字符串为“AAAABCDEF”,目标字符串为该源数据中第二次出现的“AAAAB”,目标字段为(7,7,5)。从上述例子可以看出,在源字符串的第7个字符之后为该目标字符串,从目标字符串的起始位置向前7个字节为该目标字符串在该源字符串中的起始位置,该目标字符串的长度为5。上述第一数值也可以理解为上述目标字符串前面相邻的源字符串的长度,即上述目标字符串前面相邻的未被编码的字符串的长度。在实际应用中,可以采用其他形式的目标字段描述目标字符串与上述源字符串的对应关系,本发明实施例不作限定。
本发明实施例中,利用目标字段描述目标字符串与源字符串的对应关系,以便于利用上述目标字段和上述源字符串准确、快速地确定上述目标字符串,编码效率高。
对于源字符串和描述信息的存储方式可以采用以下方式中的任意一种实现:
方式一:分别存储上述源字符串和上述描述信息。
举例来说,待压缩的源数据为“AAAABCDAAAABEFBCDAEFBC”,阈值为4,则源字符串为“AAAABCDEF”,被压缩的字符串依次为该源数据中第二次出现的“AAAAB”、“BCDA”以及“EFBC”,这3个被压缩的字符串对应的3个描述信息依次为(7,7,5),(2,10,4),(0,6,4);分别存储该源字符串“AAAABCDEF”和这三个描述信息,存储的描述信息依次为(7,7,5),(2,10,4),(0,6,4)。
可选地,可以按照上述描述信息中各个描述信息生成的顺序依次进行存储。可以理解,在这种方式下,上述源字符串和上述描述信息存储在不同的存储空间。
在这种方式下,压缩编码源数据的一种实现方式如下:从上述描述信息中获取上述目标字段;从上述源字符串中获取第一字符串;上述第一字符串为上述源数据中上述目标字符串相邻的字符串且位于上述目标字符串之前;采用上述目标算法依据上述第一数值、上述第二数值、上述第三数值以及上述第一字符串生成第一数据片段的压缩数据,上述第一数据片段包含上述第一字符串和上述目标字符串。
上述从上述源字符串中获取第一字符串可以是从上述源字符串中首个未被提取的字符串开始提取上述第一数值个字符,得到上述第一字符串。假定待压缩的源数据为“AAAABCDAAAABEFBCDAEFBC”,阈值为4,则源字符串为“AAAABCDEF”,描述信息依次为(7,7,5),(2,10,4),(0,6,4)。从该源字符串中首个未被提取的字符开始提取7个字符,得到“AAAABCD”,编码“AAAABCD”和(7,7,5),得到“AAAABCDAAAAB”的压缩数据;从该源字符串中首个未被提取的字符开始提取2个字符,得到“EF”,编码“EF”和(2,10,4),得到“EFBCDA”的压缩数据;从该源字符串中首个未被提取的字符开始提取0个字符,未得到字符串,编码(2,10,4),得到“EFBC”的压缩数据。图7为采用Lz4压缩算法编码源字符串“AAAABCD”和描述信息(7,7,5)得到的码流单元的结构示意图,对应“AAAABCDAAAAB”的压缩数据;701包含该描述信息的第一个数值和第三个数值,702为该源字符串,703为该描述信息的第二个数值。图8为采用Lz4压缩算法编码源字符串“EF”和描述信息(2,10,4)得到的码流单元的结构示意图,对应“EFBCDA”的压缩数据;801包含该描述信息的第一个数值和第三个数值,802为该源字符串,803为该描述信息的第二个数值。图9为采用Lz4压缩算法编码描述信息(0,6,4)得到的码流单元的结构示意图,对应“EFBC”的压缩数据;901包含该描述信息的第一个数值和第三个数值,902为该描述信息的第二个数值。本发明实施例中,可以依次编码存储的上述描述信息中的各描述信息,得到上述源数据的压缩数据。
采用上述方式,利用目标字段和源字符串可以快速地生成第一数据片段的压缩数据,实现简单,编码效率高。
方式二:存储目标信息;上述目标信息包含上述目标字段和第二字符串;上述第二字符串为上述源数据中上述目标字符串相邻的字符串且位于上述目标字符串之前。
上述存储目标信息可以是合并上述目标字段和上述第二字符串,得到上述目标信息,并进行存储。假定目标字段为(7,7,5),第二字符串为“AAAABCD”,则目标信息为(“AAAABCD”,7,7,5)。假定目标字段为(2,10,4),第二字符串为“EF”,则目标信息为(“EF”,2,10,4)。可以理解,在这种方式下,上述源字符串和上述描述信息作为一份数据存储在同一个存储空间。
在这种方式下,压缩编码源数据的一种实现方式如下:获取上述目标信息;采用上述目标算法依据上述第一数值、上述第二数值、上述第三数值以及上述第二字符串生成第二数据片段的压缩数据;上述第二数据片段包含上述第二字符串和上述目标字符串。
假定待压缩的源数据为“AAAABCDAAAABEFBCDAEFBC”,阈值为4,则源字符串为“AAAABCDEF”,描述信息依次为(7,7,5)、(2,10,4)、(0,6,4),存储的信息包括(“AAAABCD”,7,7,5)、(“EF”,2,10,4)、(“”,0,6,4),其中(“”,0,6,4)表示EFBC没有相邻的源字符串,即EFBC都是需要被压缩的字符串。假定目标算法为Lz4压缩算法,目标字段为(“AAAABCD”,7,7,5),采用该目标算法编码该目标字段,得到如图7所示的码流单元,对应“AAAABCDAAAAB”的压缩数据。
采用这种方式,利用目标字段可以快速地生成第二数据片段的压缩数据,实现简单,可以节省编码时间。
本发明实施例中可以采用以下方式解压压缩数据:解析上述压缩数据,得到上述指示字段指示的上述目标算法;利用上述目标算法对应的解压算法对上述压缩数据进行解压,得到上述源数据。
上述解析上述压缩数据,得到上述指示字段指示的上述目标算法可以是解析上述指示字段,依据上述指示字段确定上述目标算法。上述编解码装置预置有上述指示字段与压缩算法的对应关系。上述编解码装置在解析出上述指示字段后,可以依据上述指示字段与压缩算法的对应关系确定编码上述源数据所采用的压缩算法,即上述目标算法。
本发明实施例通过解析压缩数据的指示字段确定解压该压缩数据所需采用的解压算法,可以准确、快速地完成解压操作。
本发明实施例提供了一种编解码方法的具体举例,如图10所示,包括:
1001、在遍历源数据的过程中,获取上述源数据的源字符串和描述信息。
上述源数据对应至少一个描述信息。在遍历上述源数据的过程中,可以依次获取上述源数据对应的多个描述信息。具体实现方式与图6中的方式相同。
1002、存储获取到的源字符串和描述信息。
在遍历源数据的过程中,可以按照先后顺序依次存储获取到的描述信息和源字符串。
1003、计算至少两种压缩算法编码描述信息所需占用的存储空间。
具体实现方式与图6中的方式相同。
1004、判断遍历上述源数据的操作是否完成。
若是,执行1005;若否,执行1001。
1005、选择上述至少两种压缩算法编码描述信息所需占用的存储空间中占用存储空间较小的压缩算法作为目标算法。
具体实现方式与图6中的步骤603相同。
1006、使用上述目标算法对上述源数据进行压缩编码,得到压缩数据。
具体实现方式与图6中的步骤604相同。对比图5和图10可以看出,本发明实施例中,在对源数据进行压缩编码之前,计算至少两种压缩算法编码描述信息所需占用的存储空间,并选择编码该描述信息所需占用的存储空间较小的压缩算法作为目标算法;在选择该目标算法后,利用该目标算法编码该源数据,得到压缩数据。
本发明实施例通过在对上述源数据进行压缩编码之前,选择编码上述源数据所需占用的存储空间较小作为目标算法;并使用上述目标算法对上述源数据进行压缩编码;可以在不显著增加编码时间的条件下,明显提高压缩比。
图11示出了本发明实施例提供的一种编解码装置的功能框图。编解码装置的功能块可由硬件、软件或硬件与软件的组合来实施本发明方案。所属领域的技术人员应理解,图11中所描述的功能块可经组合或分离为若干子块以实施本发明方案。因此,本发明中上面描述的内容可支持对下述功能模块的任何可能的组合或分离或进一步定义。
如图11所示,编解码可包括:
获取单元1101,用于获取待压缩的源数据;
确定单元1102,用于根据上述待压缩的源数据确定源字符串以及描述信息;上述源字符串为上述源数据中不被压缩的字符串,上述描述信息用于描述被压缩的字符串与上述源字符串的对应关系;
计算单元1103,用于分别计算至少两种压缩算法编码上述描述信息所需占用的存储空间;
选择单元1104,用于选择上述至少两种压缩算法编码上述描述信息所需占用的存储空间中占用存储空间较小的压缩算法作为目标算法;
编码单元1105,用于使用上述目标算法对上述源数据进行压缩编码,得到压缩数据。
本发明实施例通过在对源数据进行压缩编码之前,选择编码该源数据所需占用的存储空间较小的目标算法;并使用该目标算法对该源数据进行压缩编码;可以在不显著增加编码时间的条件下,明显提高压缩比,减小占用的存储空间。
在一种可选的实现方式中,上述压缩数据包含指示字段,上述指示字段指示上述目标算法。
本发明实施例通过指示字段指示编码源数据所采用的压缩算法,以便于在解压该源数据压缩编码得到的压缩数据的时,采用该压缩算法对应的解压算法进行解压,提高解压效率。
在一种可选的实现方式中,上述描述信息包含目标字段;上述目标字段用于描述目标字符串与上述源字符串的对应关系,上述目标字符串属于被压缩的字符串;上述目标字段包含第一数值、第二数值以及第三数值;上述第一数值表示上述目标字符串与上述源字符串的位置关系;上述第二数值表示上述目标字符串在上述源字符串中的起始位置;上述第三数值表示上述目标字符串的长度。
本发明实施例中,利用目标字段描述目标字符串与源字符串的对应关系,以便于利用该目标字段和该源字符串准确地确定该目标字符串,编码效率高。
在一种可选的实现方式中,上述编解码装置还包括:
第一存储单元1106,用于分别存储上述源字符串和上述描述信息;
上述编码单元1105,具体用于从上述描述信息中获取上述目标字段;从上述源字符串中获取第一字符串;上述第一字符串为上述源数据中上述目标字符串相邻的字符串且位于上述目标字符串之前;采用上述目标算法依据上述第一数值、上述第二数值、上述第三数值以及上述第一字符串生成第一数据片段的压缩数据,上述第一数据片段包含上述第一字符串和上述目标字符串。
本发明实施例中,利用目标字段和源字符串可以快速地生成第一数据片段的压缩数据,实现简单,编码效率高。
在一种可选的实现方式中,上述编解码装置还包括:
第二存储单元1107,用于存储目标信息;上述目标信息包含上述目标字段和第二字符串;上述第二字符串为上述源数据中上述目标字符串相邻的字符串且位于上述目标字符串之前;
上述编码单元1105,具体用于获取上述目标信息;采用上述目标算法依据上述第一数值、上述第二数值、上述第三数值以及上述第二字符串生成第二数据片段的压缩数据;上述第二数据片段包含上述第二字符串和上述目标字符串。
本发明实施例中,利用目标字段可以快速地生成第二数据片段的压缩数据,实现简单,可以节省编码时间。
在一种可选的实现方式中,上述编解码装置还包括:
解析单元1108,用于解析上述压缩数据,得到上述指示字段指示的上述目标算法;
解码单元1109,用于利用上述目标算法对应的解压算法对上述压缩数据进行解压,得到上述源数据。
本发明实施例通过解析压缩数据的指示字段确定解压该压缩数据所需采用的解压算法,可以准确、快速地完成解压操作。
在一种可选的实现方式中,上述获取单元1101,具体用于按照位于上述源数据中的前后顺序依次获取上述源数据中首次出现的字符串,得到上述源字符串;采用哈希算法搜索上述源数据中与上述目标字符串相匹配的字符串;在搜索到与上述目标字符串相匹配的上述参考字符串的情况下,确定上述目标字符串为可被压缩编码的字符串;生成上述目标字段。
本发明实施例采用哈希算法搜索源数据中可被编码的字符串,并生成相应的描述信息,时间开销小。
应理解的是,本发明实施例的编解码装置可以通过专用集成电路(application-specific integrated circuit,ASIC)实现,或可编程逻辑器件(programmable logicdevice,PLD)实现,上述PLD可以是复杂程序逻辑器件(complex programmable logicaldevice,CPLD),现场可编程门阵列(field-programmable gate array,FPGA),通用阵列逻辑(generic array logic,GAL)或其任意组合。也可以通过软件实现图6所示的编解码方法时,编解码装置及其各个模块也可以为软件模块。
根据本发明实施例的编解码装置可对应于执行本发明实施例中描述的方法,并且编解码装置中的各个单元的上述和其它操作和/或功能分别为了实现图6的各个方法的相应流程,为了简洁,在此不再赘述。
本发明实施例的编解码装置通过在对源数据进行压缩编码之前,选择编码该源数据所需占用的存储空间较小的目标算法;并使用该目标算法对该源数据进行压缩编码;可以在不显著增加编码时间的条件下,明显提高压缩比,减小占用的存储空间。
参见图12,是本发明另一实施例提供的一种编解码设备的示意框图。如图12所示,本实施例中的编解码设备可以包括:一个或多个处理器1201;一个或多个输入设备1202和存储器1203。上述处理器1201、输入设备1202以及存储器1203通过总线1204连接。存储器1203用于存储计算机程序,上述计算机程序包括程序指令,处理器1201用于执行存储器1203存储的程序指令。输入设备1202用于输入压缩指令。其中,处理器1201被配置用于调用上述程序指令执行:获取待压缩的源数据,根据上述待压缩的源数据确定源字符串以及描述信息;上述源字符串为上述源数据中不被压缩的字符串,上述描述信息用于描述被压缩的字符串与上述源字符串的对应关系;分别计算至少两种压缩算法编码上述描述信息所需占用的存储空间;选择上述至少两种压缩算法编码上述描述信息所需占用的存储空间中占用存储空间较小的压缩算法作为目标算法;使用上述目标算法对上述源数据进行压缩编码,得到压缩数据。
应当理解,在本发明实施例中,所称处理器1201可以是中央处理单元(CentralProcessing Unit,CPU),该处理器还可以是其他通用处理器、数字信号处理器(DigitalSignal Processor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现成可编程门阵列(Field-Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。上述处理器1201可以实现如图11所示的获取单元1101、确定单元1102、计算单元1103、选择单元1104、编码单元1105、解析单元1108以及解码单元1109的功能。
该存储器1203包括但不限于是随机存储记忆体(Random Access Memory,RAM)、只读存储器(Read-Only Memory,ROM)、可擦除可编程只读存储器(Erasable ProgrammableRead Only Memory,EPROM)、或便携式只读存储器(Compact Disc Read-Only Memory,CD-ROM),该存储器可以用于存储相关指令及数据。上述存储器1203可以实现如图11所示的第一存储单元1106和第二存储单元1107的功能。
具体实现中,本发明实施例中所描述的处理器1201、输入设备1202以及存储器1203可执行本发明实施例提供的编解码方法所描述的实现方式,也可执行本发明实施例所描述的编解码装置的实现方式,在此不再赘述。
应理解,根据本发明实施例的编解码设备可对应于本发明实施例中图11所示的实现编解码的设备,并可以对应于执行根据本发明实施例图6的实现编解码方法中的相应主体,并且编解码设备中的各个模块的上述和其它操作和/或功能分别为了实现图6中的各个方法的相应流程,为了简洁,在此不再赘述。
本发明实施例的编解码设备通过在对源数据进行压缩编码之前,选择编码该源数据所需占用的存储空间较小的目标算法;并使用该目标算法对该源数据进行压缩编码;可以在不显著增加编码时间的条件下,明显提高压缩比,减小占用的存储空间。
在本发明的另一实施例中提供一种计算机可读存储介质,上述计算机可读存储介质存储有计算机程序,上述计算机程序包括程序指令,上述程序指令被处理器执行时实现:获取待压缩的源数据,根据上述待压缩的源数据确定源字符串以及描述信息;上述源字符串为上述源数据中不被压缩的字符串,上述描述信息用于描述被压缩的字符串与上述源字符串的对应关系;分别计算至少两种压缩算法编码上述描述信息所需占用的存储空间;选择上述至少两种压缩算法编码上述描述信息所需占用的存储空间中占用存储空间较小的压缩算法作为目标算法;使用上述目标算法对上述源数据进行压缩编码,得到压缩数据。
上述实施例,可以全部或部分地通过软件、硬件、固件或其他任意组合来实现。当使用软件实现时,上述实施例可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机指令。在计算机上加载或执行所述计算机程序指令时,全部或部分地产生按照本发明实施例所述的流程或功能。所述计算机可以为通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(DSL))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集合的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质(例如,软盘、硬盘、磁带)、光介质(例如,DVD)、或者半导体介质。半导体介质可以是固态硬盘(solid state Drive,SSD)。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到各种等效的修改或替换,这些修改或替换都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以权利要求的保护范围为准。
Claims (13)
1.一种编解码方法,其特征在于,包括:
获取待压缩的源数据,根据所述待压缩的源数据确定源字符串以及描述信息;所述源字符串为所述源数据中不被压缩的字符串,所述描述信息用于描述被压缩的字符串与所述源字符串的对应关系;
分别计算至少两种压缩算法编码所述描述信息所需占用的存储空间;
选择所述至少两种压缩算法编码所述描述信息所需占用的存储空间中占用存储空间较小的压缩算法作为目标算法;
使用所述目标算法对所述源数据进行压缩编码,得到压缩数据。
2.根据权利要求1所述的编解码方法,其特征在于,所述压缩数据包含指示字段,所述指示字段指示所述目标算法。
3.根据权利要求1或2所述的编解码方法,其特征在于,所述描述信息包含目标字段;所述目标字段用于描述目标字符串与所述源字符串的对应关系,所述目标字符串属于被压缩的字符串;所述目标字段包含第一数值、第二数值以及第三数值;所述第一数值表示所述目标字符串与所述源字符串的位置关系;所述第二数值表示所述目标字符串在所述源字符串中的起始位置;所述第三数值表示所述目标字符串的长度。
4.根据权利要求1至3中任一所述的编解码方法,其特征在于,所述根据所述待压缩的源数据确定源字符串以及描述信息之后,所述方法还包括:
分别存储所述源字符串和所述描述信息;
所述使用所述目标算法对所述源数据进行压缩编码,得到压缩数据包括:
从所述描述信息中获取所述目标字段;
从所述源字符串中获取第一字符串;所述第一字符串为所述源数据中所述目标字符串相邻的字符串且位于所述目标字符串之前;
采用所述目标算法依据所述第一数值、所述第二数值、所述第三数值以及所述第一字符串生成第一数据片段的压缩数据,所述第一数据片段包含所述第一字符串和所述目标字符串。
5.根据权利要求1至3中任一所述的编解码方法,其特征在于,所述根据所述待压缩的源数据确定源字符串以及描述信息之后,所述方法还包括:
存储目标信息;所述目标信息包含所述目标字段和第二字符串;所述第二字符串为所述源数据中所述目标字符串相邻的字符串且位于所述目标字符串之前;
所述使用所述目标算法对所述源数据进行压缩编码,得到压缩数据包括:
获取所述目标信息;
采用所述目标算法依据所述第一数值、所述第二数值、所述第三数值以及所述第二字符串生成第二数据片段的压缩数据;所述第二数据片段包含所述第二字符串和所述目标字符串。
6.根据权利要求1至5任一所述的编解码方法,其特征在于,所述根据所述待压缩的源数据确定源字符串以及描述信息包括:
按照位于所述源数据中的前后顺序依次获取所述源数据中首次出现的字符串,得到所述源字符串;
采用哈希算法搜索所述源数据中与所述目标字符串相匹配的字符串;
在搜索到与所述目标字符串相匹配的字符串的情况下,确定所述目标字符串为可被压缩编码的字符串;
获得所述第一数值、所述第二数值以及所述第三数值,生成所述目标字段。
7.一种编解码装置,其特征在于,包括:
获取单元,用于获取待压缩的源数据;
确定单元,用于根据所述待压缩的源数据确定源字符串以及描述信息;所述源字符串为所述源数据中不被压缩的字符串,所述描述信息用于描述被压缩的字符串与所述源字符串的对应关系;
计算单元,用于分别计算至少两种压缩算法编码所述描述信息所需占用的存储空间;
选择单元,用于选择所述至少两种压缩算法编码所述描述信息所需占用的存储空间中占用存储空间较小的压缩算法作为目标算法;
编码单元,用于使用所述目标算法对所述源数据进行压缩编码,得到压缩数据。
8.根据权利要求7所述的编解码装置,其特征在于,所述压缩数据包含指示字段,所述指示字段指示所述目标算法。
9.根据权利要求7或8所述的编解码装置,其特征在于,所述描述信息包含目标字段;所述目标字段用于描述目标字符串与所述源字符串的对应关系,所述目标字符串属于被压缩的字符串;所述目标字段包含第一数值、第二数值以及第三数值;所述第一数值表示所述目标字符串与所述源字符串的位置关系;所述第二数值表示所述目标字符串在所述源字符串中的起始位置;所述第三数值表示所述目标字符串的长度。
10.根据权利要求7至9中任一所述的编解码装置,其特征在于,所述编解码装置还包括:
第一存储单元,用于分别存储所述源字符串和所述描述信息;
所述编码单元,具体用于从所述描述信息中获取所述目标字段;从所述源字符串中获取第一字符串;所述第一字符串为所述源数据中所述目标字符串相邻的字符串且位于所述目标字符串之前;采用所述目标算法依据所述第一数值、所述第二数值、所述第三数值以及所述第一字符串生成第一数据片段的压缩数据,所述第一数据片段包含所述第一字符串和所述目标字符串。
11.根据权利要求7至9中任一所述的编解码装置,其特征在于,所述编解码装置还包括:
第二存储单元,用于存储目标信息;所述目标信息包含所述目标字段和第二字符串;所述第二字符串为所述源数据中所述目标字符串相邻的字符串且位于所述目标字符串之前;
所述编码单元,具体用于获取所述目标信息;采用所述目标算法依据所述第一数值、所述第二数值、所述第三数值以及所述第二字符串生成第二数据片段的压缩数据;所述第二数据片段包含所述第二字符串和所述目标字符串。
12.根据权利要求7至11任一所述的编解码装置,其特征在于,所述获取单元,具体用于按照位于所述源数据中的前后顺序依次获取所述源数据中首次出现的字符串,得到所述源字符串;采用哈希算法搜索所述源数据中与所述目标字符串相匹配的字符串;在搜索到与所述目标字符串相匹配的字符串的情况下,确定所述目标字符串为可被压缩编码的字符串;生成所述目标字段。
13.一种编解码设备,其特征在于,包括处理器和存储器,所述处理器和存储器相互连接,其中,所述存储器用于存储计算机程序,所述计算机程序包括程序指令,所述处理器被配置用于调用所述程序指令,执行如权利要求1-6任一项所述的方法。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810133325.5A CN108322220A (zh) | 2018-02-08 | 2018-02-08 | 编解码方法、装置及编解码设备 |
PCT/CN2018/100615 WO2019153700A1 (zh) | 2018-02-08 | 2018-08-15 | 编解码方法、装置及编解码设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810133325.5A CN108322220A (zh) | 2018-02-08 | 2018-02-08 | 编解码方法、装置及编解码设备 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN108322220A true CN108322220A (zh) | 2018-07-24 |
Family
ID=62903950
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810133325.5A Pending CN108322220A (zh) | 2018-02-08 | 2018-02-08 | 编解码方法、装置及编解码设备 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN108322220A (zh) |
WO (1) | WO2019153700A1 (zh) |
Cited By (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109067405A (zh) * | 2018-07-27 | 2018-12-21 | 深圳还是威健康科技有限公司 | 一种数据压缩的方法、装置、终端及计算机可读存储介质 |
WO2019153700A1 (zh) * | 2018-02-08 | 2019-08-15 | 华为技术有限公司 | 编解码方法、装置及编解码设备 |
CN110378457A (zh) * | 2019-06-26 | 2019-10-25 | 全球码链科技有限公司 | 一种码标的生成方法及装置 |
CN111767280A (zh) * | 2020-04-17 | 2020-10-13 | 北京沃东天骏信息技术有限公司 | 数据处理方法、装置及存储介质 |
CN111817722A (zh) * | 2020-07-09 | 2020-10-23 | 北京奥星贝斯科技有限公司 | 数据压缩方法、装置及计算机设备 |
CN112711935A (zh) * | 2020-12-11 | 2021-04-27 | 中国科学院深圳先进技术研究院 | 编码方法、解码方法、装置及计算机可读存储介质 |
CN112713899A (zh) * | 2020-12-18 | 2021-04-27 | 广东高云半导体科技股份有限公司 | Fpga码流数据的压缩方法、装置及存储介质 |
CN113271108A (zh) * | 2021-05-25 | 2021-08-17 | 上海众言网络科技有限公司 | 问卷答题数据传输方法及装置 |
CN113676375A (zh) * | 2021-08-13 | 2021-11-19 | 浙江大学 | 一种工业控制系统私有协议结构解析方法 |
CN113765854A (zh) * | 2020-06-04 | 2021-12-07 | 华为技术有限公司 | 一种数据压缩方法及服务器 |
CN115499016A (zh) * | 2022-11-15 | 2022-12-20 | 中科声龙科技发展(北京)有限公司 | 基于二进制的数据处理的方法、装置、设备及存储介质 |
CN115589436A (zh) * | 2022-12-14 | 2023-01-10 | 三亚海兰寰宇海洋信息科技有限公司 | 一种数据处理方法、装置及设备 |
WO2023231265A1 (zh) * | 2022-05-30 | 2023-12-07 | 深圳市吉迩科技有限公司 | 基于嵌入式系统图片的无损压缩算法、装置、计算机设备及存储介质 |
US20240012799A1 (en) * | 2022-07-05 | 2024-01-11 | Sap Se | Compression service using fpga compression |
Citations (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1356787A (zh) * | 2000-11-24 | 2002-07-03 | 松下电器产业株式会社 | 声音信号编码设备和方法 |
CN1561618A (zh) * | 2001-06-04 | 2005-01-05 | Nct集团公司 | 用于增加通信网络的有效带宽的系统及方法 |
US20070140353A1 (en) * | 2005-12-19 | 2007-06-21 | Sharp Laboratories Of America, Inc. | Intra prediction skipping in mode selection for video compression |
CN101237301A (zh) * | 2008-02-22 | 2008-08-06 | 深圳市深信服电子科技有限公司 | 动态数据压缩技术 |
CN101287058A (zh) * | 2007-02-21 | 2008-10-15 | 三星电子株式会社 | 数据文件压缩设备及其方法 |
CN101448066A (zh) * | 2007-11-28 | 2009-06-03 | 三星Techwin株式会社 | 控制文件压缩比的方法和设备 |
CN102594360A (zh) * | 2012-02-01 | 2012-07-18 | 浪潮(北京)电子信息产业有限公司 | 一种计算机数据压缩方法及装置 |
CN103197924A (zh) * | 2012-01-06 | 2013-07-10 | 国际商业机器公司 | 用于实时选择压缩操作的方法和系统 |
CN103929185A (zh) * | 2013-01-10 | 2014-07-16 | 国际商业机器公司 | 实时减少数据压缩的中央处理单元开销的方法和系统 |
CN104462334A (zh) * | 2014-12-03 | 2015-03-25 | 天津南大通用数据技术股份有限公司 | 一种列存数据库的数据压缩方法及装置 |
CN104737223A (zh) * | 2012-10-09 | 2015-06-24 | 联发科技股份有限公司 | 具自适应选择压缩/解压缩算法以透过显示接口进行数据通信的数据处理装置以及相关数据处理方法 |
CN105653698A (zh) * | 2015-12-30 | 2016-06-08 | 北京奇艺世纪科技有限公司 | 一种数据库表Hive Table的数据加载方法和装置 |
WO2016103112A1 (en) * | 2014-12-23 | 2016-06-30 | International Business Machines Corporation | Workload-adaptive data packing algorithm |
CN107066401A (zh) * | 2016-12-30 | 2017-08-18 | 广东欧珀移动通信有限公司 | 一种基于移动终端架构的数据传输的方法及移动终端 |
CN107592117A (zh) * | 2017-08-15 | 2018-01-16 | 深圳前海信息技术有限公司 | 基于Deflate的压缩数据块输出方法及装置 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108322220A (zh) * | 2018-02-08 | 2018-07-24 | 华为技术有限公司 | 编解码方法、装置及编解码设备 |
-
2018
- 2018-02-08 CN CN201810133325.5A patent/CN108322220A/zh active Pending
- 2018-08-15 WO PCT/CN2018/100615 patent/WO2019153700A1/zh active Application Filing
Patent Citations (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1356787A (zh) * | 2000-11-24 | 2002-07-03 | 松下电器产业株式会社 | 声音信号编码设备和方法 |
CN1561618A (zh) * | 2001-06-04 | 2005-01-05 | Nct集团公司 | 用于增加通信网络的有效带宽的系统及方法 |
US20070140353A1 (en) * | 2005-12-19 | 2007-06-21 | Sharp Laboratories Of America, Inc. | Intra prediction skipping in mode selection for video compression |
CN101287058A (zh) * | 2007-02-21 | 2008-10-15 | 三星电子株式会社 | 数据文件压缩设备及其方法 |
CN101448066A (zh) * | 2007-11-28 | 2009-06-03 | 三星Techwin株式会社 | 控制文件压缩比的方法和设备 |
CN101237301A (zh) * | 2008-02-22 | 2008-08-06 | 深圳市深信服电子科技有限公司 | 动态数据压缩技术 |
CN103197924A (zh) * | 2012-01-06 | 2013-07-10 | 国际商业机器公司 | 用于实时选择压缩操作的方法和系统 |
CN102594360A (zh) * | 2012-02-01 | 2012-07-18 | 浪潮(北京)电子信息产业有限公司 | 一种计算机数据压缩方法及装置 |
CN104737223A (zh) * | 2012-10-09 | 2015-06-24 | 联发科技股份有限公司 | 具自适应选择压缩/解压缩算法以透过显示接口进行数据通信的数据处理装置以及相关数据处理方法 |
CN103929185A (zh) * | 2013-01-10 | 2014-07-16 | 国际商业机器公司 | 实时减少数据压缩的中央处理单元开销的方法和系统 |
CN104462334A (zh) * | 2014-12-03 | 2015-03-25 | 天津南大通用数据技术股份有限公司 | 一种列存数据库的数据压缩方法及装置 |
WO2016103112A1 (en) * | 2014-12-23 | 2016-06-30 | International Business Machines Corporation | Workload-adaptive data packing algorithm |
CN105653698A (zh) * | 2015-12-30 | 2016-06-08 | 北京奇艺世纪科技有限公司 | 一种数据库表Hive Table的数据加载方法和装置 |
CN107066401A (zh) * | 2016-12-30 | 2017-08-18 | 广东欧珀移动通信有限公司 | 一种基于移动终端架构的数据传输的方法及移动终端 |
CN107592117A (zh) * | 2017-08-15 | 2018-01-16 | 深圳前海信息技术有限公司 | 基于Deflate的压缩数据块输出方法及装置 |
Cited By (22)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2019153700A1 (zh) * | 2018-02-08 | 2019-08-15 | 华为技术有限公司 | 编解码方法、装置及编解码设备 |
CN109067405B (zh) * | 2018-07-27 | 2022-10-11 | 深圳市元征科技股份有限公司 | 一种数据压缩的方法、装置、终端及计算机可读存储介质 |
CN109067405A (zh) * | 2018-07-27 | 2018-12-21 | 深圳还是威健康科技有限公司 | 一种数据压缩的方法、装置、终端及计算机可读存储介质 |
CN110378457A (zh) * | 2019-06-26 | 2019-10-25 | 全球码链科技有限公司 | 一种码标的生成方法及装置 |
CN110378457B (zh) * | 2019-06-26 | 2023-06-20 | 全球码链科技有限公司 | 一种码标的生成方法及装置 |
CN111767280A (zh) * | 2020-04-17 | 2020-10-13 | 北京沃东天骏信息技术有限公司 | 数据处理方法、装置及存储介质 |
CN113765854A (zh) * | 2020-06-04 | 2021-12-07 | 华为技术有限公司 | 一种数据压缩方法及服务器 |
CN113765854B (zh) * | 2020-06-04 | 2023-06-30 | 华为技术有限公司 | 一种数据压缩方法及服务器 |
CN111817722A (zh) * | 2020-07-09 | 2020-10-23 | 北京奥星贝斯科技有限公司 | 数据压缩方法、装置及计算机设备 |
WO2022120912A1 (zh) * | 2020-12-11 | 2022-06-16 | 中国科学院深圳先进技术研究院 | 编码方法、解码方法、装置及计算机可读存储介质 |
CN112711935B (zh) * | 2020-12-11 | 2023-04-18 | 中国科学院深圳先进技术研究院 | 编码方法、解码方法、装置及计算机可读存储介质 |
CN112711935A (zh) * | 2020-12-11 | 2021-04-27 | 中国科学院深圳先进技术研究院 | 编码方法、解码方法、装置及计算机可读存储介质 |
CN112713899A (zh) * | 2020-12-18 | 2021-04-27 | 广东高云半导体科技股份有限公司 | Fpga码流数据的压缩方法、装置及存储介质 |
CN113271108A (zh) * | 2021-05-25 | 2021-08-17 | 上海众言网络科技有限公司 | 问卷答题数据传输方法及装置 |
CN113676375A (zh) * | 2021-08-13 | 2021-11-19 | 浙江大学 | 一种工业控制系统私有协议结构解析方法 |
CN113676375B (zh) * | 2021-08-13 | 2023-03-14 | 浙江大学 | 一种工业控制系统私有协议结构解析方法 |
WO2023231265A1 (zh) * | 2022-05-30 | 2023-12-07 | 深圳市吉迩科技有限公司 | 基于嵌入式系统图片的无损压缩算法、装置、计算机设备及存储介质 |
US20240012799A1 (en) * | 2022-07-05 | 2024-01-11 | Sap Se | Compression service using fpga compression |
US11995058B2 (en) * | 2022-07-05 | 2024-05-28 | Sap Se | Compression service using FPGA compression |
CN115499016A (zh) * | 2022-11-15 | 2022-12-20 | 中科声龙科技发展(北京)有限公司 | 基于二进制的数据处理的方法、装置、设备及存储介质 |
CN115589436A (zh) * | 2022-12-14 | 2023-01-10 | 三亚海兰寰宇海洋信息科技有限公司 | 一种数据处理方法、装置及设备 |
CN115589436B (zh) * | 2022-12-14 | 2023-03-28 | 三亚海兰寰宇海洋信息科技有限公司 | 一种数据处理方法、装置及设备 |
Also Published As
Publication number | Publication date |
---|---|
WO2019153700A1 (zh) | 2019-08-15 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108322220A (zh) | 编解码方法、装置及编解码设备 | |
Manzini | An analysis of the Burrows—Wheeler transform | |
JP2581903B2 (ja) | バイト整列式データ圧縮方法及び装置 | |
RU2464630C2 (ru) | Двухпроходное хеш извлечение текстовых строк | |
AU702207B2 (en) | Method of and apparatus for compressing and decompressing data and data processing apparatus and network system using the same | |
US8120516B2 (en) | Data compression using a stream selector with edit-in-place capability for compressed data | |
Franaszek et al. | Parallel compression with cooperative dictionary construction | |
Lin et al. | A lossless data compression and decompression algorithm and its hardware architecture | |
US20120262314A1 (en) | System and Method of Compression and Decompression | |
JP3778087B2 (ja) | データ符号化装置及びデータ復号装置 | |
WO2010044100A1 (en) | Lossless compression | |
US11722148B2 (en) | Systems and methods of data compression | |
WO1994022072A1 (en) | Information processing using context-insensitive parsing | |
US6304676B1 (en) | Apparatus and method for successively refined competitive compression with redundant decompression | |
JP2021527376A (ja) | データ圧縮 | |
CN109428603A (zh) | 一种数据编码方法、装置以及存储介质 | |
WO2019080670A1 (zh) | 基因测序数据压缩解压方法、系统及计算机可读介质 | |
CN109428602A (zh) | 一种数据编码方法、装置以及存储介质 | |
CN112398484A (zh) | 一种编码方法及相关设备 | |
US20100321218A1 (en) | Lossless content encoding | |
WO2018055160A1 (en) | System level testing of entropy encoding | |
JP2016052046A (ja) | 圧縮装置、伸長装置およびストレージ装置 | |
Niemi et al. | Burrows‐Wheeler post‐transformation with effective clustering and interpolative coding | |
Shanmugasundaram et al. | Text preprocessing using enhanced intelligent dictionary based encoding (EIDBE) | |
Fredriksson et al. | Processing of Huffman compressed texts with a super-alphabet |
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 | ||
TA01 | Transfer of patent application right | ||
TA01 | Transfer of patent application right |
Effective date of registration: 20220210 Address after: 550025 Huawei cloud data center, jiaoxinggong Road, Qianzhong Avenue, Gui'an New District, Guiyang City, Guizhou Province Applicant after: Huawei Cloud Computing Technologies Co.,Ltd. Address before: 518129 Bantian HUAWEI headquarters office building, Longgang District, Guangdong, Shenzhen Applicant before: HUAWEI TECHNOLOGIES Co.,Ltd. |
|
RJ01 | Rejection of invention patent application after publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20180724 |