CN114567331A - 一种基于lz77的压缩方法、装置及其介质 - Google Patents
一种基于lz77的压缩方法、装置及其介质 Download PDFInfo
- Publication number
- CN114567331A CN114567331A CN202210111481.8A CN202210111481A CN114567331A CN 114567331 A CN114567331 A CN 114567331A CN 202210111481 A CN202210111481 A CN 202210111481A CN 114567331 A CN114567331 A CN 114567331A
- Authority
- CN
- China
- Prior art keywords
- data
- matching
- compressed
- value
- character string
- 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
-
- 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
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Compression, Expansion, Code Conversion, And Decoders (AREA)
Abstract
本申请公开了一种基于LZ77的压缩方法、装置及其介质,针对目前使用单字节匹配的方式需要消耗大量硬件资源的问题,提供了一种基于LZ77的压缩方法,包括:获取待压缩数据;由于通常在获取待压缩数据时以字为匹配单元,所以将待压缩数据以双字节的步进进行数据匹配,获取与后续数据匹配的匹配字符串时,减少了重复进行匹配的次数,以实现降低硬件资源的消耗;再获取匹配字符串的LE值和DI值;将获取到的LE值与DI值组成匹配对,并将待压缩数据中的匹配字符串替换成匹配对;待所有待压缩数据进行完数据匹配并将匹配字符串替换成匹配对之后,得到压缩数据,完成整个压缩过程。
Description
技术领域
本申请涉及计算机数据压缩技术领域,特别是涉及一种基于LZ77的压缩方法、装置及其介质。
背景技术
在目前的通信、计算机文件存档等方面,常需要对数据进行压缩处理,其中,以LZ77编码使用的尤为广泛。LZ77编码总会包含一个动态窗口(Sliding Window)和一个预读缓冲器(Read Ahead Buffer)。动态窗口是个历史缓冲器,它被用来存放输入流的前m个字节的有关信息,一个动态窗口的数据范围最大可以到64K;预读缓冲器是与动态窗口相对应的,它被用来存放输入流的前n个字节,预读缓冲器的大小通常在0至258之间,用下n个字节填充预读缓冲器;然后在动态窗口中寻找与预读缓冲器中的最匹配的数据,如果匹配的数据长度大于最小匹配长度(通常取决于编码器,以及动态窗口的大小,比如一个4K的动态窗口,它的最小匹配长度就是2),那么就输出一对<长度,距离>数组,将这对数组称之为匹配对。长度(length,LE)是匹配的数据长度,而距离(distance,DI)则说明了在输入流中向后多少字节这个匹配数据可以被找到;用对应的匹配对代替原有的数据,最终实现数据的压缩。
近年来,在使用LZ77编码时,通常使用单字节全匹配的形式进行数据的匹配,进而获取各匹配数据的长度并进行相应的压缩处理。但这种单字节匹配的方式步骤繁琐,且重复匹配的次数过多,需要消耗大量硬件资源,不利于硬件的实现。
所以,现在本领域的技术人员亟需要一种基于LZ77的压缩方法,解决目前使用单字节匹配的方式步骤繁琐,且重复匹配的次数过多,需要消耗大量硬件资源,不利于硬件的实现的问题。
发明内容
本申请的目的是提供一种基于LZ77的压缩方法、装置及其介质,解决目前使用单字节匹配的方式步骤繁琐,且重复匹配的次数过多,需要消耗大量硬件资源,不利于硬件的实现的问题。
为解决上述技术问题,本申请提供一种基于LZ77的压缩方法,包括:
获取待压缩数据;
将待压缩数据以双字节的步进进行数据匹配,获取与后续数据匹配的匹配字符串;其中,后续数据至少为两个字节;
获取匹配字符串的LE值和DI值;其中,LE值为匹配字符串的长度,DI值为匹配字符串和与其匹配的后续数据之间的距离;
将获取到的LE值与DI值组成匹配对,并将待压缩数据中的匹配字符串替换成匹配对;
待所有待压缩数据进行完数据匹配并将匹配字符串替换成匹配对之后,得到压缩数据。
优选地,在获取匹配的字符串之后,还包括:将匹配字符串前后的单字节进行重新匹配,以获取新的匹配字符串。
优选地,当匹配对中的LE值超过预读缓冲器所能容纳的字节数时,本方法还包括:将匹配对根据LE值拆解成多对匹配对,其中,拆解后的匹配对的LE值不超过预读缓冲器所能容纳的字节数。
优选地,将待压缩数据中的匹配字符串替换成匹配对包括:
匹配字符串的原始数据被替换成匹配对为按字节一一替换,不足处以空气泡标记替换原始数据;
对应的,得到压缩数据之前还包括:
去除待压缩数据中的空气泡标记。
优选地,获取待压缩数据包括:根据待压缩数据的哈希值以四字节作为匹配单元获取待压缩数据;
对应的,获取到待压缩数据后,还包括:判断待压缩数据是否满足匹配规则,其中,匹配规则包括:根据DI值确定的数据是否在动态窗口内、以及获取到的待压缩数据是否为原文。
优选地,当LE值超过单次时钟所能处理数据的字节数时,本方法还包括:
将匹配字符串下一字节的待压缩数据替换成空气泡标记;
判断匹配字符串的前一字节是否匹配;
若匹配,则将LE值加一;
若不匹配,则将匹配字符串下一字节的待压缩数据复原到距离LE值所在字节处最近的空气泡标记处。
优选地,在得到压缩数据之后,还包括:返回提示信息,以提示数据接收方或操作人员数据压缩完毕。
为解决上述技术问题,本申请还提供一种基于LZ77的压缩装置,包括:
获取模块,用于获取待压缩数据;
匹配模块,用于将待压缩数据以双字节的步进进行数据匹配,获取与后续数据匹配的匹配字符串;其中,后续数据至少为两个字节;
计算模块,用于获取匹配字符串的LE值和DI值;其中,LE值为匹配字符串的长度,DI值为匹配字符串和与其匹配的后续数据之间的距离;
替换模块,用于将获取到的LE值与DI值组成匹配对,并将待压缩数据中的匹配字符串替换成匹配对;
压缩模块,用于待所有待压缩数据进行完数据匹配并将匹配字符串替换成匹配对之后,得到压缩数据。
优选地,在获取匹配的字符串之后,还包括:单字节找回模块,用于将匹配字符串前后的单字节进行重新匹配,以获取新的匹配字符串。
优选地,当匹配对中的LE值超过预读缓冲器所能容纳的字节数时,还包括:拆分模块,用于将匹配对根据LE值拆解成多对匹配对,其中,拆解后的匹配对的LE值不超过预读缓冲器所能容纳的字节数。
优选地,当LE值超过单次时钟所能处理数据的字节数时,还包括:遗留原文处理模块,用于将匹配字符串下一字节的待压缩数据替换成空气泡标记;判断匹配字符串的前一字节是否匹配;若匹配,则将LE值加一;若不匹配,则将匹配字符串下一字节的待压缩数据复原到距离LE值所在字节处最近的空气泡标记处。
优选地,在得到压缩数据之后,还包括:提示模块,用于返回提示信息,以提示数据接收方或操作人员数据压缩完毕。
为解决上述技术问题,本申请还提供一种基于LZ77的压缩装置,包括:
存储器,用于存储计算机程序;
处理器,用于执行计算机程序时实现如上述的基于LZ77的压缩方法的步骤。
为解决上述技术问题,本申请还提供一种计算机可读存储介质,计算机可读存储介质上存储有计算机程序,计算机程序被处理器执行时实现如上述的基于LZ77的压缩方法的步骤。
本申请提供的一种基于LZ77的压缩方法,通过以双字节的步进进行数据匹配,减少了重复进行匹配的次数,同时在获取匹配字符串时,由于每次通过哈希值获取的匹配单元多以4字节为一个匹配单元,在获取长度超过4字节的匹配字符串时,需要将各匹配单元串联形成更长的匹配字符串,以双字节为步进相对于目前使用的单字节串联更简单,进一步降低了资源消耗。
本申请提供的基于LZ77的压缩装置、及计算机可读存储介质,与上述方法对应,效果同上。
附图说明
为了更清楚地说明本申请实施例,下面将对实施例中所需要使用的附图做简单的介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明提供的一种基于LZ77的压缩方法的流程图;
图2为本发明提供的双字节融合的数据处理示意图;
图3为本发明提供的一种基于LZ77的压缩方法的数据处理示意图;
图4为本发明提供的单字节找回的数据处理示意图;
图5为本发明提供的遗留原文数据处理的示意图;
图6为本发明提供的一种基于LZ77的压缩装置的结构图;
图7为本发明提供的另一种基于LZ77的压缩装置的结构图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下,所获得的所有其他实施例,都属于本申请保护范围。
本申请的核心是提供一种基于LZ77的压缩方法、装置及其介质。
为了使本技术领域的人员更好地理解本申请方案,下面结合附图和具体实施方式对本申请作进一步的详细说明。
在如今的通信、以及计算机文件存储的方面,通常使用LZ77编码实现数据的压缩,通过对比数据流中是否存在大于最小匹配长度的两串数据相同的字符串,若存在,则可以用一串字符串表示另一串与之匹配的字符串,这种字符串称之为匹配字符串。
例如,如图2所示,图2(a)表示原始输入的数据;图2(b)表示进行完双字节融合后的数据;每一个方格表示一个字节;方格中的字母表示数据的值,不同字母表示的数据的值不同;数据流向为由左向右;竖直虚线为动态窗口与预读缓冲器的边界交界处,虚线左侧为预读缓冲器,虚线右侧为动态窗口;LI表示上方方格中的数据为未压缩的原始数据;DI表示上方方格中为DI值;LE表示上方方格中为LE值;INV表示上方方格中为空气泡标记。在原始输入的数据流中,存在虚线框框出的两串相同的字符串,每个字符串的长度为4个字节,一个字符串位移八个字节可以找到另一字符串,所以可以通过<长度,距离>的关系,用一串字符串表示另一串字符串,例如,本示例中为<4,8>,表示在8个字节后,一串4个字节长的字符串与本处的字符串一致。
所以由上述可知,如何找到匹配的两串字符串是LZ77编码实现的关键,如何在保证匹配到的匹配字符串长度尽可能长的情况下,减少匹配运算的次数与复杂度为本技术领域人员所重视的问题。目前,通常使用单字节全匹配的方式进行数据的匹配,这种方式需要进行大量的匹配运算,同时在匹配字符串长度较长时,需要进行多次串联,消耗大量硬件资源,因此,如图1所示,本身请提供一种基于LZ77的压缩方法,包括:
S11:获取待压缩数据。
多数情况下,硬件无法对全部的数据流进行处理,所以通常使用哈希算法将输入的所有数据计算出具有相同特性的哈希值,并根据哈希值将数据存入缓存中,形成一个不断更新的查找表,当需要使用到某些数据时,只需根据其对应的哈希值进行查找读取即可,且一般来说,在进行读写查询时,以4个字节作为一个单元用于进行数据匹配,称为匹配单元。
S12:将待压缩数据以双字节的步进进行数据匹配,获取与后续数据匹配的匹配字符串;其中,后续数据至少为两个字节。
当获取到上述的匹配单元后,以双字节的步进进行数据匹配,考虑到匹配字符串的长度可能不止4个字节,无法通过一个匹配单元得到完整的匹配字符串,所以还需要将满足匹配条件的各个匹配单元之间进行串联,最终获取完整的匹配字符串。
S13:获取匹配字符串的LE值和DI值;其中,LE值为匹配字符串的长度,DI值为匹配字符串和与其匹配的后续数据之间的距离。
在获取到匹配字符串之后,容易得到匹配字符串的字节长度,以及其与对应匹配的字符串之间的字节距离,如图2所示,虚线框出的两串字符串为相互匹配的字符串,前一串字符串为上述的匹配字符串,所以容易知道匹配字符串的长度为4个字节、距离为8个字节。
S14:将获取到的LE值与DI值组成匹配对,并将待压缩数据中的匹配字符串替换成匹配对。
在得到上述的LE值和DI值之后,可以得到一对<DI,LE>形式的数据组,这对数据组称之为匹配对。例如图2中所示的匹配字符串,其匹配对即为<8,4>,在实际编码中用16进制来表示即为图2中的<0x8,0x4>。
其中需要说明的是,本实施例提供的以<DI,LE>形式的匹配对仅为一种实施方案,匹配对也可以是<LE,DI>形式的,本实施例对此不做限制。同时,一般DI值为16比特,占2个字节的长度,而长度一般在实际应用中限制在0至258之间,占用一个字节长度,所以匹配对以字节形式表征为<DI,DI,LE>,其中,两个DI表示同一DI值的2个字节的值。所以图2中的匹配对为<0x0,0x8,0x4>。
S15:待所有待压缩数据进行完数据匹配并将匹配字符串替换成匹配对之后,得到压缩数据。
将所有的数据匹配完之后,可以得到所有匹配字符串,以及其对应的匹配对,将所有的匹配字符串用匹配对进行替换,以实现数据的压缩。例如图2中,原始输入的数据流长度为16个字节,匹配字符串长度为4个字节,用匹配对<0x0,0x8,0x4>替换匹配字符串之后,数据流的长度变为15个字节,也即进行了数据压缩。虽然本示例中仅压缩了一个字节,但容易知道的是,当数据流较长时,会出现大量的匹配字符串,以及更长的匹配字符串,如此,数据压缩的效果将会十分可观。
本申请所提供的一种基于LZ77的压缩方法,通过使用双字节作为数据匹配的步进,使得在进行数据匹配时减少了重复进行匹配的次数,而在进行各匹配单元的串联以获取最终的匹配串联串时,以双字节作为步进同样相对于单字节来说更为简单,进一步降低了对硬件资源的消耗,更容易在硬件上实现。
上述实施例中通过双字节作为数据匹配的步进,实现减少匹配次数、降低硬件资源消耗的效果,但是仅通过双字节作为步进进行数据匹配,对于长度为奇数的匹配字符串识别不准确,使得在进行将匹配字符串替换成匹配对时,存在仍有匹配的字节未被识别,进而没有进行替换的情况,影响数据压缩的压缩率,所以,本实施例在上述实施例的基础上,还提供一种优选的实施方案,在获取匹配的字符串之后,还包括:
S16:将匹配字符串前后的单字节进行重新匹配,以获取新的匹配字符串。
由于以双字节进行数据匹配在当前匹配的两组长度为两个字节的数据都一致时,才能识别为匹配,若仅一个字节一致,则无法识别出。
如图3(a)中所示,对于虚线框框出的5个字节长的匹配字符串,仅通过双字节步进匹配仅能识别出如图3(b)中虚线框出的4个字节长的匹配字符串,对于数据E无法匹配,所以本实施例提供的一种优选方案还对双字节步进匹配出的匹配字符串重新进行匹配,匹配的对象为原匹配字符串的前后各一个字节,如图3(c)中,由于原匹配字符串前一字节数据超出预读缓冲器的范围,所以仅对后一字节进行重新匹配,也即数据E,匹配后得知数据E同样符合匹配规则,所以匹配字符串长度加一,匹配对变为<0x0,0x8,0x5>。
为进一步说明本实施例提供的一种优选方案,如图4所示,图4(a)为单字节找回匹配的原始数据;图4(b)为单字节找回向前匹配成功时的数据;图4(c)单字节找回向后匹配成功时的数据;图4(d)单字节找回向前和向后均匹配成功时的数据。
如图4(b)所示,若单字节找回向前匹配成功,则将前一字节的数据替换成空气泡标记,并将LE值加一;如图4(c)所示,若单字节找回向后匹配成功,则将后一字节的数据替换成空气泡标记,并将LE值加一;如图4(d)所示,若单字节找回向前、向后均匹配成功,则将前一字节和后一字节的数据替换成空气泡标记,并将LE值加二。
本实施例提供一种单字节找回的优选方案,使压缩过程现以双字节步进进行初步的匹配,再用单字节找回的形式弥补以双字节作为步进导致的压缩率的不足,同时,本实施例结合上述实施例中的以双字节作为匹配步进,将原本复杂的单字节全匹配拆分成双字节和单字节两次匹配过程,简化了匹配压缩过程,降低了匹配次数,进而减少了硬件资源的消耗。
同时,由于在实际应用中,动态窗口的范围比较大,最大可以达到64K,而LE的表示范围较小,最大也只有258,而目前主要是通过对动态窗口中的匹配字符串计算长度,所以当计算出的LE值超过限值时就要将其切片,因此,本实施例还提供一种优选的实施方案,当匹配对中的LE值超过预读缓冲器所能容纳的字节数时,本方法还包括:
S21:将匹配对根据LE值拆解成多对匹配对,其中,拆解后的匹配对的LE值不超过预读缓冲器所能容纳的字节数。
例如图3中的匹配字符串长度为5个字节,若预读缓冲器大小仅为两个字节,所以LE值不应超过2,匹配对就应拆成两个LE值为2、一个LE值为1的形式,其中一个LE值为2的匹配对如图3(d)中所示,为<0x0,0x8,0x2>。
值得注意的是,在实际应用中,存在部分用户有将长度编码转换成霍夫曼编码的需求,此时根据霍夫曼编码对应原则,将长度3~258对应为0~255编码,可根据实际需要决定是否进行编码转换。
本实施例通过将超过预读缓冲器所能容纳的字节数的LE值进行切片,使其符合要求,进而避免由于LE值超过预读缓冲器所能容纳的字节数导致对压缩产生不良的影响。
由上述实施例可知,由于数据的匹配过程不都是一次就能完成的,且为避免完成压缩的数据在后续的压缩过程中被重复计算,所以本实施例还提供一种优选的实施方案,步骤S14中的将待压缩数据中的匹配字符串替换成匹配对包括:
S141:匹配字符串的原始数据被替换成匹配对为按字节一一替换,不足处以空气泡标记替换原始数据。
S142:对应的,得到压缩数据之前还包括。
S143:去除待压缩数据中的空气泡标记。
其中,空气泡标记在图2和图3中,以INV表示,INV上方的方格用0x0等无意义数据填充,避免在压缩过程中被重复计算。但在最后输出压缩后的数据前,要将空气泡标记去除,如图3(e)中所示,进行完长度切片后,虚线框框出的原匹配数据串中有两个字节位为空气泡标记,需要将其剔除,最终即为图3(e)中虚线框框出的3个字节长的字符串。
本实施例提供的优选方案通过使用空气泡标记替换被压缩的数据,从而避免在后续的匹配或压缩过程中被重复计算,进而减少了匹配次数,节省了硬件资源的消耗。
由于在实际应用中,多通过哈希算法将各数据计算出具有相同特性的哈希值,根据哈希值将各数据存入缓存中,进而形成一个不断更新的查找表,当进行后续的读写时,可以根据查找表获取相应的数据。所以在根据哈希值获取相应数据时,本实施例还提供一种优选的实施方案,步骤S11获取待压缩数据包括:
S111:根据待压缩数据的哈希值以四字节作为匹配单元获取待压缩数据。
对应的,获取到待压缩数据后,还包括:
S112:判断待压缩数据是否满足匹配规则,其中,匹配规则包括:根据DI值确定的数据是否在动态窗口内、以及获取到的待压缩数据是否为原文。
满足匹配规则的数据继续进行后续的压缩操作,而不满足匹配规则的数据,则不进行压缩原样输出。实现在进行后续的匹配、压缩操作之前,先对待压缩数据进行初步的判断,避免不符合匹配规则的待压缩数据进行无用的匹配过程,而导致的浪费硬件资源的问题。
为进一步说明本申请所提供的一种基于LZ77的压缩方法,本实施例还提供一种优选方案,当LE值超过单次时钟所能处理数据的字节数时,本方法还包括:
S22:将匹配字符串下一字节的待压缩数据替换成空气泡标记。
S23:判断匹配字符串的前一字节是否匹配,若匹配则转至步骤S24,若不匹配则转至步骤S25。
S24:将LE值加一。
S25:将匹配字符串下一字节的待压缩数据复原到距离LE值所在字节处最近的空气泡标记处。
为提高压缩的效率,在实际应用中多采用流水化的方式进行数据压缩。相应的,流水化的数据处理只能处理当前数据,过去的数据无法再次修改,所以在进行单字节找回的步骤时,若如图5(a)所示,遇到压前的1字节LI数据;如图5(b)所示,先将其修改成空气泡标记,再根据向前单字节对比的结果决定是单字节找回成功或是失败;如果失败,则如图5(b)所示,将原始的LI复原到离LE最近的INV的位置;如果成功,则如图5(c)所示,将LE的长度加1。进而满足实现流水化的需要,保证***处理的延迟和性能,提高了数据压缩的效率。
而当数据压缩完之后,本实施例还提供一种优选的实施方案,还包括:
S26:返回提示信息,以提示数据接收方或操作人员数据压缩完毕。
以实现在数据压缩完毕后,及时提示相关人员,进而进行数据的传输或存储。
在上述实施例中,对于一种基于LZ77的压缩方法进行了详细描述,本申请还提供一种基于LZ77的压缩装置对应的实施例。需要说明的是,本申请从两个角度对装置部分的实施例进行描述,一种是基于功能模块的角度,另一种是基于硬件的角度。
如图6所示,基于功能模块的角度,本实施例提供一种基于LZ77的压缩装置,包括:
获取模块31,用于获取待压缩数据;
匹配模块32,用于将待压缩数据以双字节的步进进行数据匹配,获取与后续数据匹配的匹配字符串;其中,后续数据至少为两个字节;
计算模块33,用于获取匹配字符串的LE值和DI值;其中,LE值为匹配字符串的长度,DI值为匹配字符串和与其匹配的后续数据之间的距离;
替换模块34,用于将获取到的LE值与DI值组成匹配对,并将待压缩数据中的匹配字符串替换成匹配对;
压缩模块35,用于待所有待压缩数据进行完数据匹配,并将匹配字符串替换成匹配对后,得到压缩数据。
优选地,在获取匹配的字符串之后,还包括:单字节找回模块,用于将匹配字符串前后的单字节进行重新匹配,以获取新的匹配字符串。
优选地,当匹配对中的LE值超过预读缓冲器所能容纳的字节数时,还包括:拆分模块,用于将匹配对根据LE值拆解成多对匹配对,其中,拆解后的匹配对的LE值不超过预读缓冲器所能容纳的字节数。
优选地,当LE值超过单次时钟所能处理数据的字节数时,还包括:遗留原文处理模块,用于将匹配字符串下一字节的待压缩数据替换成空气泡标记;判断匹配字符串的前一字节是否匹配;若匹配,则将LE值加一;若不匹配,则将匹配字符串下一字节的待压缩数据复原到距离LE值所在字节处最近的空气泡标记处。
优选地,在得到压缩数据之后,还包括:提示模块,用于返回提示信息,以提示数据接收方或操作人员数据压缩完毕。
由于装置部分的实施例与方法部分的实施例相互对应,因此装置部分的实施例请参见方法部分的实施例的描述,这里暂不赘述。
本实施例所提供的一种基于LZ77的压缩装置,通过使用双字节作为数据匹配的步进,使得在进行数据匹配时减少了重复进行匹配的次数,而在进行各匹配单元的串联以获取最终的匹配串联串时,以双字节作为步进同样相对于单字节来说更为简单,进一步降低了对硬件资源的消耗,更容易在硬件上实现。
图7为本申请另一实施例提供的一种基于LZ77的压缩装置的结构图,如图7所示,一种基于LZ77的压缩装置包括:存储器40,用于存储计算机程序;
处理器41,用于执行计算机程序时实现如上述实施例一种基于LZ77的压缩方法的步骤。
本实施例提供的一种基于LZ77的压缩装置可以包括但不限于智能手机、平板电脑、笔记本电脑或台式电脑等。
其中,处理器41可以包括一个或多个处理核心,比如4核心处理器、8核心处理器等。处理器41可以采用数字信号处理器(Digital Signal Processor,DSP)、现场可编程门阵列(Field-Programmable Gate Array,FPGA)、可编程逻辑阵列(Programmable LogicArray,PLA)中的至少一种硬件形式来实现。处理器41也可以包括主处理器和协处理器,主处理器是用于对在唤醒状态下的数据进行处理的处理器,也称中央处理器(CentralProcessing Unit,CPU);协处理器是用于对在待机状态下的数据进行处理的低功耗处理器。在一些实施例中,处理器41可以在集成有图像处理器(Graphics Processing Unit,GPU),GPU用于负责显示屏所需要显示的内容的渲染和绘制。一些实施例中,处理器41还可以包括人工智能(Artificial Intelligence,AI)处理器,该AI处理器用于处理有关机器学习的计算操作。
存储器40可以包括一个或多个计算机可读存储介质,该计算机可读存储介质可以是非暂态的。存储器40还可包括高速随机存取存储器,以及非易失性存储器,比如一个或多个磁盘存储设备、闪存存储设备。本实施例中,存储器40至少用于存储以下计算机程序401,其中,该计算机程序被处理器41加载并执行之后,能够实现前述任一实施例公开的一种基于LZ77的压缩方法的相关步骤。另外,存储器40所存储的资源还可以包括操作***402和数据403等,存储方式可以是短暂存储或者永久存储。其中,操作***402可以包括Windows、Unix、Linux等。数据403可以包括但不限于一种基于LZ77的压缩方法等。
在一些实施例中,一种基于LZ77的压缩装置还可包括有显示屏42、输入输出接口43、通信接口44、电源45以及通信总线46。
本领域技术人员可以理解,图7中示出的结构并不构成对一种基于LZ77的压缩装置的限定,可以包括比图示更多或更少的组件。
本申请实施例提供的一种基于LZ77的压缩装置,包括存储器和处理器,处理器在执行存储器存储的程序时,能够实现如下方法:一种基于LZ77的压缩方法。
本实施例所提供的一种基于LZ77的压缩装置,通过处理器执行保存在存储器中的一种基于LZ77的压缩方法,实现使用双字节作为数据匹配的步进,使得在进行数据匹配时减少了重复进行匹配的次数,而在进行各匹配单元的串联以获取最终的匹配串联串时,以双字节作为步进同样相对于单字节来说更为简单,进一步降低了对硬件资源的消耗,更容易在硬件上实现。
最后,本申请还提供一种计算机可读存储介质对应的实施例。计算机可读存储介质上存储有计算机程序,计算机程序被处理器执行时实现如上述方法实施例中记载的步骤。
可以理解的是,如果上述实施例中的方法以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(Read-Only Memory,ROM)、随机存取存储器(RandomAccess Memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
本实施例所提供的一种计算机可读存储介质,通过处理器执行保存在存储介质中的一种基于LZ77的压缩方法,实现使用双字节作为数据匹配的步进,使得在进行数据匹配时减少了重复进行匹配的次数,而在进行各匹配单元的串联以获取最终的匹配串联串时,以双字节作为步进同样相对于单字节来说更为简单,进一步降低了对硬件资源的消耗,更容易在硬件上实现。
以上对本申请所提供的一种基于LZ77的压缩方法、装置及其介质进行了详细介绍。说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的装置而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。应当指出,对于本技术领域的普通技术人员来说,在不脱离本申请原理的前提下,还可以对本申请进行若干改进和修饰,这些改进和修饰也落入本申请权利要求的保护范围内。
还需要说明的是,在本说明书中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
Claims (10)
1.一种基于LZ77的压缩方法,其特征在于,包括:
获取待压缩数据;
将所述待压缩数据以双字节的步进进行数据匹配,获取与后续数据匹配的匹配字符串;其中,所述后续数据至少为两个字节;
获取所述匹配字符串的LE值和DI值;其中,所述LE值为所述匹配字符串的长度,所述DI值为所述匹配字符串和与其匹配的所述后续数据之间的距离;
将获取到的所述LE值与所述DI值组成匹配对,并将所述待压缩数据中的所述匹配字符串替换成所述匹配对;
待所有所述待压缩数据进行完所述数据匹配并将所述匹配字符串替换成所述匹配对之后,得到压缩数据。
2.根据权利要求1所述的基于LZ77的压缩方法,其特征在于,在所述获取匹配的字符串之后,还包括:
将所述匹配字符串前后的单字节进行重新匹配,以获取新的所述匹配字符串。
3.根据权利要求1所述的基于LZ77的压缩方法,其特征在于,当所述匹配对中的所述LE值超过预读缓冲器所能容纳的字节数时,本方法还包括:
将所述匹配对根据所述LE值拆解成多对所述匹配对,其中,拆解后的所述匹配对的所述LE值不超过所述预读缓冲器所能容纳的字节数。
4.根据权利要求1所述的基于LZ77的压缩方法,其特征在于,所述将所述待压缩数据中的所述匹配字符串替换成所述匹配对包括:
所述匹配字符串的原始数据被替换成所述匹配对为按字节一一替换,不足处以空气泡标记替换所述原始数据;
对应的,所述得到压缩数据之前还包括:
去除所述待压缩数据中的所述空气泡标记。
5.根据权利要求1至4任意一项所述的基于LZ77的压缩方法,其特征在于,所述获取待压缩数据包括:
根据所述待压缩数据的哈希值以四字节作为匹配单元获取所述待压缩数据;
对应的,获取到所述待压缩数据后,还包括:
判断所述待压缩数据是否满足匹配规则,其中,所述匹配规则包括:根据所述DI值确定的数据是否在动态窗口内、以及获取到的所述待压缩数据是否为原文。
6.根据权利要求2所述的基于LZ77的压缩方法,其特征在于,当所述LE值超过单次时钟所能处理数据的字节数时,本方法还包括:
将所述匹配字符串下一字节的所述待压缩数据替换成空气泡标记;
判断所述匹配字符串的前一字节是否匹配;
若匹配,则将所述LE值加一;
若不匹配,则将所述匹配字符串下一字节的所述待压缩数据复原到距离所述LE值所在字节处最近的所述空气泡标记处。
7.根据权利要求1所述的基于LZ77的压缩方法,其特征在于,在所述得到压缩数据之后,还包括:
返回提示信息,以提示数据接收方或操作人员数据压缩完毕。
8.一种基于LZ77的压缩装置,其特征在于,包括:
获取模块,用于获取待压缩数据;
匹配模块,用于将所述待压缩数据以双字节的步进进行数据匹配,获取与后续数据匹配的匹配字符串;其中,所述后续数据至少为两个字节;
计算模块,用于获取所述匹配字符串的LE值和DI值;其中,所述LE值为所述匹配字符串的长度,所述DI值为所述匹配字符串和与其匹配的所述后续数据之间的距离;
替换模块,用于将获取到的所述LE值与所述DI值组成匹配对,并将所述待压缩数据中的所述匹配字符串替换成所述匹配对;
压缩模块,用于待所有所述待压缩数据进行完所述数据匹配并将所述匹配字符串替换成所述匹配对之后,得到压缩数据。
9.一种基于LZ77的压缩装置,其特征在于,包括:
存储器,用于存储计算机程序;
处理器,用于执行所述计算机程序时实现如权利要求1至7任意一项所述的基于LZ77的压缩方法的步骤。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如权利要求1至7任意一项所述的基于LZ77的压缩方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210111481.8A CN114567331A (zh) | 2022-01-29 | 2022-01-29 | 一种基于lz77的压缩方法、装置及其介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210111481.8A CN114567331A (zh) | 2022-01-29 | 2022-01-29 | 一种基于lz77的压缩方法、装置及其介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114567331A true CN114567331A (zh) | 2022-05-31 |
Family
ID=81713198
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210111481.8A Pending CN114567331A (zh) | 2022-01-29 | 2022-01-29 | 一种基于lz77的压缩方法、装置及其介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114567331A (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115988569A (zh) * | 2023-03-21 | 2023-04-18 | 浙江省疾病预防控制中心 | 一种蓝牙设备数据快速传输方法 |
CN116032292A (zh) * | 2023-03-27 | 2023-04-28 | 山东智慧译百信息技术有限公司 | 一种基于翻译文件的大数据高效存储方法 |
CN117113106A (zh) * | 2023-10-19 | 2023-11-24 | 深圳大普微电子股份有限公司 | 一种数据压缩方法、装置及电子设备和存储介质 |
-
2022
- 2022-01-29 CN CN202210111481.8A patent/CN114567331A/zh active Pending
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115988569A (zh) * | 2023-03-21 | 2023-04-18 | 浙江省疾病预防控制中心 | 一种蓝牙设备数据快速传输方法 |
CN115988569B (zh) * | 2023-03-21 | 2023-06-30 | 浙江省疾病预防控制中心 | 一种蓝牙设备数据快速传输方法 |
CN116032292A (zh) * | 2023-03-27 | 2023-04-28 | 山东智慧译百信息技术有限公司 | 一种基于翻译文件的大数据高效存储方法 |
CN117113106A (zh) * | 2023-10-19 | 2023-11-24 | 深圳大普微电子股份有限公司 | 一种数据压缩方法、装置及电子设备和存储介质 |
CN117113106B (zh) * | 2023-10-19 | 2024-03-19 | 深圳大普微电子股份有限公司 | 一种数据压缩方法、装置及电子设备和存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN114567331A (zh) | 一种基于lz77的压缩方法、装置及其介质 | |
US10305512B2 (en) | Encoding method and apparatus | |
US9223765B1 (en) | Encoding and decoding data using context model grouping | |
US20130307709A1 (en) | Efficient techniques for aligned fixed-length compression | |
CN101783788B (zh) | 文件压缩、解压缩方法、装置及压缩文件搜索方法、装置 | |
US10224957B1 (en) | Hash-based data matching enhanced with backward matching for data compression | |
CN106549673B (zh) | 一种数据压缩方法及装置 | |
JP3778087B2 (ja) | データ符号化装置及びデータ復号装置 | |
US20200294629A1 (en) | Gene sequencing data compression method and decompression method, system and computer-readable medium | |
CN110554878A (zh) | 数据转换方法、游戏数据的处理方法、装置和服务器 | |
JP5656593B2 (ja) | 符号化データを復号する装置及び方法 | |
US11669553B2 (en) | Context-dependent shared dictionaries | |
JPS6356726B2 (zh) | ||
US11309909B2 (en) | Compression device, decompression device, and method | |
EP2442256B1 (en) | Method of encoding and decoding text on a matrix code symbol | |
US11593286B2 (en) | Memory system and information processing system | |
US10084477B2 (en) | Method and apparatus for adaptive data compression | |
CA2737928C (en) | Method and apparatus for entropy decoding | |
JP4093200B2 (ja) | データ圧縮方法及びプログラムならびにデータ復元方法及び装置 | |
US11748307B2 (en) | Selective data compression based on data similarity | |
US20230283294A1 (en) | Information processing apparatus and preset dictionary generating method | |
JP2005269184A (ja) | データ圧縮方法及びプログラムならびにデータ復元方法及び装置 | |
CN115001628B (zh) | 数据编码的方法及装置、数据解码的方法及装置和数据结构 | |
CN107547906B (zh) | 一种jpeg图像解码的方法与装置 | |
CN113595557B (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 |