用于加速压缩和解压缩操作的设备以及方法

文档序号:9510125阅读:371来源:国知局
用于加速压缩和解压缩操作的设备以及方法
【专利说明】
【背景技术】
[0001]LZ77压缩算法。压缩算法力求减少数据量,而不会牺牲数据内的信息。被称为LZ77算法的一种压缩算法,通过参考在输入(未经压缩的)数据流中较早存在的数据的单个复制,替换该数据的重复的出现,来实现压缩。通过叫做长度-距离对的一对数字(“距离”有时叫做“偏移”),来编码匹配。
[0002]为对准匹配,编码器跟踪某些量的最近的数据,诸如最后2kB、4kB,或32kB。此数据被保留在其中的结构叫做“滑动窗口”(如此,LZ77有时叫做滑动窗口压缩)。编码器将最近的数据保留在滑动窗口内,以查找匹配(解码器同样保留此数据,以解释编码器引用的匹配)。
[0003]图1示出了 LZ77编码方案的简单示例。如在图1中观察到的,将比特流100的在前(较早或较旧)部分101的比特模式与比特流的当前部分102进行比较。如果在当前部分102中发现匹配在前部分101中的比特序列的比特序列,则将当前部分102的比特序列替换为对较早部分101中的相同比特序列的引用。例如,当前部分102的比特序列将被替换为对较早的部分101的比特序列103的引用。
[0004]针对比特序列102插入的引用标识比特序列102的长度104 (其也与比特序列103的长度相同)和比特序列103的位置。这里,比特序列103的位置被表达为从当前部分102到匹配的比特序列103的“距离” 105。如此,LZ77压缩方案将比特序列102编码为被插入在比特流中代替序列102的“长度,距离对”。在解码压缩流时,当解码器到达被嵌入到比特流中代替比特序列102的长度,距离对时,它简单地使用长度,距离对的距离部分,以回头引用比特序列103的开始,并通过再现从比特序列103的开始起的等于长度,距离对的长度分量的比特的数量,来再现解码的流的部分102的正确的比特序列。DEFLATE(紧缩)压缩算法。被用来压缩gzip、Zlib、PKZip和WinZip文件的DEFLATE压缩方案,与其他压缩方案一起使用LZ77压缩算法来执行综合的总体压缩方案。
[0005]图2示出了 DEFLATE压缩算法的总览。如在图2中观察到的,在LZ77压缩之后,压缩的比特流200可以被视为与数据符号(literal) 202_1,202_2,...202_N混合的一系列长度/距离对201_1,201_2,...201_Mo数据符号对应于原始比特流内的在转换到长度/距离对的适用的窗口内没有较早的相同的模式可被标识的比特模式。
[0006]然后,DEFLATE压缩算法继续进行以包括对LZ77压缩流200的下一级压缩203。下一级压缩203引入了两种不同类型的霍夫曼编码,它们一起将长度/距离对201和数据符号202的比较常见的比特模式替换为较小代码204,并且将长度/距离对201和数据符号202的不太常见的比特模式替换为较大的代码205。第一种类型的霍夫曼编码被用来编码数据符号和长度。第二种类型的霍夫曼编码被用来编码距离。通过利用较少的比特来表示LZ77压缩流200的更常见的比特模式,应该减少在最后的DEFLATE压缩流206中存在的信息的总的大小。
[0007]在图3中呈现了用于数据符号和长度的第一种类型的霍夫曼编码的表示。如在图3中观察到的,数据符号信息被逐字节地分解。由于一字节对应于8比特信息,因此,有2'8 = 256个不同的数据符号字节值(从O到255,以十进制表示)。每一数据符号字节值都对应于霍夫曼树中的一个节点,其中,节点本身的身份1:1对应于数据符号的值(即,00000000的数据符号字节对应于O的霍夫曼树节点身份,00000001的数据符号字节对应于I的霍夫曼树节点身份...,11111111的数据符号字节对应于255的霍夫曼树节点身份)。
[0008]每一霍夫曼树节点都具有被作为该树节点的对应的数据符号字节的已编码的符号直接插入到比特流中的相关联的编码值。如此,例如,霍夫曼树节点O具有00110000的霍夫曼编码,霍夫曼树节点255具有111111111的霍夫曼编码。如此,流203中的00000000的数据符号字节将在DEFLATE压缩的比特流206中被编码为00110000,流203中的11111111的数据符号字节将在DEFLATE压缩的比特流206中被编码为111111111。值得注意的是,00000000的数据符号字节具有比11111111的数据符号字节更高的发生概率,如此,在最终编码比特流206中,流200中的00000000的数据符号字节的编码比流200中的数据符号字节11111111的编码(111111111具有9比特)消耗更少的比特空间(00110000具有8比特)。
[0009]霍夫曼树还具有带有256的身份的节点。该节点对应于块结束(EOB)符号在流200中的出现。在deflate压缩方案中,总体数据被分解为较小的块,近邻块之间的划界用EOB符号标记。为简明起见,在流200中未示出EOB符号,在流206中也未示出其编码值。
[0010]霍夫曼树包括身份用于编码长度,距离对的长度信息(窗口大小)的身份257到285的额外的29个节点。长度信息可以是3到258个字节。这里,树身份257到264以及285对应于特定的(并且更加频繁地遇到的)长度(具体而言,身份257对应于3字节长度,身份258对应于4字节长度,...等等,...身份264对应于10字节的长度,身份285对应于258个字节的长度)。身份257到264以及258中的每一个都利用6个比特或较少的比特编码(比较频繁的长度消耗小于6个比特,不太频繁的长度消耗高达6个比特。
[0011]霍夫曼树的身份265到284被用来指定长度范围,而并非特定的长度。这里,跨身份265到284,指定范围11字节到257字节内的长度。每一霍夫曼树节点身份都对应于长度的不同的范围。例如,身份265对应于11或12字节的长度范围。相比之下,身份284对应于227字节到257字节的长度范围。为了从对应于长度范围的霍夫曼码节点身份指定一个特定长度,向霍夫曼码节点身份的编码中添加“额外比特”。例如,向霍夫曼码节点身份265的编码中添加一个额外比特,以便可以指定两个长度(11或12字节)。相比之下,向霍夫曼码节点身份284中添加5个额外比特,以便可以分别地指定31个不同的长度(即,长度227到257中的任何一个(包括227和257))。
[0012]值得注意的是,霍夫曼节点身份O到285中的任何一个的编码都是“不相重叠的”,这意味着它们的比特序列是唯一的。例如,如果最短的编码中的一个是1010,没有其他最短或以别的方式的编码,则从比特序列1010开始。如此,当解码完全编码的比特流时,每一单个编码的符号都易于识别,并可仅对应于一个8比特模式一一如果是数据符号或长度的话。如上文所讨论的,某些编码的长度具有相关联的额外比特。如在流205中观察到的,任何额外比特都被追加到编码的长度。如此,例如,如果在流205中一个特定的比特序列由解码器识别为对应于节点身份265,那么,立即认识到,该特定的比特序列之后的接下来的比特必须是该节点身份的额外比特。作为另一个示例,如果在流205中一个特定的比特序列由解码器识别为对应于节点身份284,那么,立即认识到,该特定的比特序列之后的接下来五个比特必须是该节点身份的额外的比特。
[0013]距离是根据与长度类似的技术编码的,但是,使用不同的霍夫曼树(第二类型的霍夫曼树,未示出)。用于距离的第二类型的霍夫曼树具有30个节点,而不是286 (如同数据符号/长度编码一样),并被用来编码从I字节到32,768字节的距离。再次,比较频繁的距离对应于较低的树节点身份,以及编码符号中的较少的比特数,而不太常见的距
当前第1页1 2 3 4 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1