CN107395209B - 数据压缩方法、数据解压缩方法及其设备 - Google Patents
数据压缩方法、数据解压缩方法及其设备 Download PDFInfo
- Publication number
- CN107395209B CN107395209B CN201710535377.0A CN201710535377A CN107395209B CN 107395209 B CN107395209 B CN 107395209B CN 201710535377 A CN201710535377 A CN 201710535377A CN 107395209 B CN107395209 B CN 107395209B
- Authority
- CN
- China
- Prior art keywords
- compressed
- index
- code
- file
- characters
- 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
-
- 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
-
- 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
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Compression, Expansion, Code Conversion, And Decoders (AREA)
Abstract
本公开提供了一种数据压缩方法。该方法包括将要压缩的文件划分为一个或多个代码段;根据预定压缩方案对所述一个或多个代码段中的每个代码段进行压缩,以生成已压缩代码段;针对每个已压缩代码段生成索引,所述索引能够表示对应的已压缩代码段;以及将每个已压缩代码段和与其对应的索引进行组合,以生成压缩文件。本公开还提供了与该方法相对应的设备和计算机可读存储介质。
Description
技术领域
本公开涉及计算机技术领域,更具体地,涉及一种数据压缩方法、一种数据解压缩方法及其设备。
背景技术
出于数据传输效率和数据安全等目的,对文件进行压缩已成为计算机领域中常用的一种数据处理方式。然而,现有的压缩技术对文件进行压缩时,会造成文件结构混乱。这对于某些文件(例如可执行文件)而言可能改变文件段的执行顺序,导致在解压缩时需要花费更多的时间来重建正确的文件段顺序。
因此,需要一种文件压缩方式,使得可快速方便地解压已压缩的文件。
发明内容
有鉴于此,本公开提供了一种数据压缩方法、一种数据解压缩方法及其设备。
本公开的一个方面提供了一种数据压缩方法。该方法包括将要压缩的文件划分为一个或多个代码段,根据预定压缩方案对所述一个或多个代码段中的每个代码段进行压缩,以生成已压缩代码段,以及针对每个已压缩代码段生成索引,所述索引能够表示对应的已压缩代码段。该方法还包括将每个已压缩代码段和与其对应的索引进行组合,以生成压缩文件。
根据本公开的一些实施例,将每个已压缩的代码段和与其对应的索引进行组合以生成压缩文件可包括:将索引集中添加到所有已压缩代码段之后且压缩文件的结束标记之前。其中,针对每个已压缩代码段生成索引可包括:使用散列函数对每个已压缩代码段的内容进行处理,以生成所述每个已压缩代码段的内容的散列摘要来作为对应已压缩代码段的索引。
根据本公开的一些实施例,该方法还可包括在压缩文件的头部添加标记,其中,该标记指向所添加的索引。
根据本公开的一些实施例,其中,上述预定压缩方案可以是LZMA压缩方案。LZMA压缩方案使用保存未压缩字符的搜索缓存和保存已压缩字符的滑动窗口。在该情况下,根据预定压缩方案对一个或多个代码段中的每个代码段进行压缩可包括:针对每个代码段,当搜索缓存中即将被压缩的不少于第一数量的字符所组成的字符串在滑动窗口中存在相同的字符串时,输出包括指示字符串匹配的第一标记位、所述字符串在滑动窗口中的起始位置以及所述字符串的长度在内的代码。该方法还可包括:针对每个代码段,当搜索缓存中即将被压缩的字符在滑动窗口中不存在相同的字符时,或者当搜索缓存中即将被压缩的第二数量的字符所组成的字符串在滑动窗口中存在相同的字符串且第二数量小于第一数量时,输出包括指示字符串不匹配的第二标记位和即将被压缩的字符在内的代码。
根据本公开的一些实施例,在使用LZMA压缩方案压缩之后,针对每个代码段,该方法还可包括对各个字符串在滑动窗口中的起始位置进行第一霍夫曼编码,以获得第一序列。该方法还可包括对各个字符串的长度以及被认为不匹配的字符或字符串中的字符进行第二霍夫曼编码,以获得第二序列。该方法还可包括:对第一序列和第二序列进行第三霍夫曼编码,以得到已压缩代码段。
本公开的另一个方面提供了一种用于数据压缩的设备。该设备包括代码划分模块、代码段压缩模块、索引生成模块、压缩文件生成模块以及压缩文件生成模块。代码划分模块用于将要压缩的文件划分为一个或多个代码段。代码段压缩模块用于根据预定压缩方案对所述一个或多个代码段中的每个代码段进行压缩,以生成已压缩代码段。索引生成模块用于针对每个已压缩代码段生成索引,所述索引能够表示对应的已压缩代码段。压缩文件生成模块用于将每个已压缩代码段和与其对应的索引进行组合,以生成压缩文件。
根据本公开的一些实施例,其中,压缩文件生成模块可用于将索引集中添加到所有已压缩代码段之后且所述压缩文件的结束标记之前。索引生成模块还可用于使用散列函数对每个已压缩代码段的内容进行处理,以生成每个已压缩代码段的内容的散列摘要来作为对应已压缩代码段的索引。
根据本公开的一些实施例,该设备还可包括标记添加模块,用于在压缩文件的头部添加标记,所述标记指向所添加的索引。
根据本公开的一些实施例,所述预定压缩方案可以是LZMA压缩方案。LZMA压缩方案使用保存未压缩字符的搜索缓存和保存已压缩字符的滑动窗口。在此情况下,代码段压缩模块可用于针对每个代码段,当搜索缓存中即将被压缩的不少于第一数量的字符所组成的字符串在滑动窗口中存在相同的字符串时,输出包括指示字符串匹配的第一标记位、所述字符串在滑动窗口中的起始位置以及所述字符串的长度在内的代码。代码段压缩模块还可用于针对每个代码段,当搜索缓存中即将被压缩的字符在滑动窗口中不存在相同的字符时,或者当搜索缓存中即将被压缩的第二数量的字符所组成的字符串在滑动窗口中存在相同的字符串且第二数量小于第一数量时,输出包括指示字符串不匹配的第二标记位和即将被压缩的字符在内的代码。
根据本公开的一些实施例,针对每个代码段,在使用LZMA压缩方案压缩之后,代码段压缩模块还可用于:对各个字符串在滑动窗口中的起始位置进行第一霍夫曼编码以获得第一序列,对各个字符串的长度以及被认为不匹配的字符或字符串中的字符进行第二霍夫曼编码以获得第二序列,以及对第一序列和第二序列进行第三霍夫曼编码,以得到已压缩代码段。
本公开的另一方面提供了一种用于数据压缩的设备。该设备包括存储计算机可执行指令的存储器以及处理器。处理器执行存储器存储的计算机可执行指令,以执行如上所述的数据压缩方法。
本公开的另一方面提供了一种计算机可读存储介质,存储有计算机可执行指令,所述指令在被执行时用于实现如上所述的数据压缩方法。
本公开的另一方面提供了一种计算机程序,所述计算机程序包括计算机可执行指令,所述指令在被执行时用于实现如上所述的数据压缩方法。
本公开的另一方面提供了一种用于数据解压缩的方法。该方法用于对压缩文件进行解压缩,其中,压缩文件包括一个或多个已压缩代码段以及与每个已压缩代码段对应的索引,该索引能够表示对应的已压缩代码段。该数据解压缩方法包括读取索引,根据索引获取该一个或多个已压缩代码段,根据预定解压缩方案对该一个或多个已压缩代码段进行解压缩,以及将解压缩的每个代码段进行组合,以形成解压缩的文件。
根据本公开的一些实施例,索引可以是对应已压缩代码段的内容的散列摘要。在此情况下,根据索引获取所述一个或多个已压缩代码段可包括根据散列摘要恢复对应的已压缩代码段的内容。
根据本公开的一些实施例,压缩文件还可以包括位于压缩文件头部的标记,该标记指向上述索引。在此情况下,读取索引可包括读取标记以获得索引。
本公开的另一方面提供了一种用于数据解压缩的设备。该设备用于对压缩文件进行解压缩,其中,压缩文件包括一个或多个已压缩代码段以及与每个已压缩代码段对应的索引,该索引能够表示对应的已压缩代码段。设备包括索引获取模块、代码段获取模块、解压缩模块和文件生成模块。索引获取模块用于读取索引。代码段获取模块用于根据索引获取该一个或多个已压缩代码段。解压缩模块用于根据预定解压缩方案对该一个或多个已压缩代码段进行解压缩。文件生成模块用于将解压缩的每个代码段进行组合,以形成解压缩的文件。
根据本公开的一些实施例,索引可以是对应已压缩代码段的内容的散列摘要。在此情况下,代码段获取模块还可用于根据散列摘要恢复对应的已压缩代码段的内容。
根据本公开的一些实施例,压缩文件还可以包括位于压缩文件头部的标记,该标记指向上述索引。在此情况下,索引获取模块还用于读取标记以获得索引。
本公开的另一方面提供了一种用于数据压缩的设备。该设备包括存储计算机可执行指令的存储器以及处理器。处理器执行存储器存储的计算机可执行指令,以执行如上所述的数据解压缩方法。
本公开的另一方面提供了一种计算机可读存储介质,存储有计算机可执行指令,所述指令在被执行时用于实现如上所述的数据解压缩方法。
本公开的另一方面提供了一种计算机程序,所述计算机程序包括计算机可执行指令,所述指令在被执行时用于实现如上所述的数据解压缩方法。
根据本公开的实施例,可以至少部分地解决因对文件进行压缩改变文件段的执行顺序而导致的需要花费更多的时间来重建正确的文件段顺序的问题,并因此可以实现快速方便地解压已压缩的文件的技术效果。
上述方案对于可执行文件的压缩/解压尤为有利。通过上述技术方案,由于通过索引建立了文件段的正确顺序,使得能够对已压缩的可执行文件进行直接执行,而无需先进行解压并重建文件段顺序。
附图说明
通过以下参照附图对本公开实施例的描述,本公开的上述以及其他目的、特征和优点将更为清楚,在附图中:
图1示意性示出了根据本公开的实施例的数据压缩方法的流程图;
图2示意性示出了根据本公开的实施例的压缩文件的一个示例的结构示意图;
图3示意性示出了根据本公开的实施例的数据压缩方法的算法流程图;
图4示意性示出了根据本公开的实施例的压缩码流格式的结构示意图;
图5示意性示出了根据本公开的实施例的用于数据压缩的设备的结构示意图;
图6示意性示出了根据本公开的另一实施例的用于数据压缩的设备的结构示意图;
图7示意性示出了根据本公开的实施例的数据解压缩方法的流程图;
图8示意性示出了根据本公开实施例的用于数据解压缩的设备的结构示意图;
图9示意性示出了根据本公开的另一实施例的用于数据压缩的设备的框图;以及
图10示意性示出了根据本公开实施例的可以应用根据图1或图7所示方法的示例性系统架构。
具体实施方式
以下,将参照附图来描述本公开的实施例。但是应该理解,这些描述只是示例性的,而并非要限制本公开的范围。此外,在以下说明中,省略了对公知结构和技术的描述,以避免不必要地混淆本公开的概念。
在此使用的术语仅仅是为了描述具体实施例,而并非意在限制本公开。这里使用的词语“一”、“一个(种)”和“该”等也应包括“多个”、“多种”的意思,除非上下文另外明确指出。此外,在此使用的术语“包括”、“包含”等表明了所述特征、步骤、操作和/或部件的存在,但是并不排除存在或添加一个或多个其他特征、步骤、操作或部件。
在此使用的所有术语(包括技术和科学术语)具有本领域技术人员通常所理解的含义,除非另外定义。应注意,这里使用的术语应解释为具有与本说明书的上下文相一致的含义,而不应以理想化或过于刻板的方式来解释。
附图中示出了一些方框图和/或流程图。应理解,方框图和/或流程图中的一些方框或其组合可以由计算机程序指令来实现。这些计算机程序指令可以提供给通用计算机、专用计算机或其他可编程数据处理装置的处理器,从而这些指令在由该处理器执行时可以创建用于实现这些方框图和/或流程图中所说明的功能/操作的装置。
因此,本公开的技术可以硬件和/或软件(包括固件、微代码等)的形式来实现。另外,本公开的技术可以采取存储有指令的计算机可读介质上的计算机程序产品的形式,该计算机程序产品可供指令执行系统使用或者结合指令执行系统使用。在本公开的上下文中,计算机可读介质可以是能够包含、存储、传送、传播或传输指令的任意介质。例如,计算机可读介质可以包括但不限于电、磁、光、电磁、红外或半导体系统、装置、器件或传播介质。计算机可读介质的具体示例包括:磁存储装置,如磁带或硬盘(HDD);光存储装置,如光盘(CD-ROM);存储器,如随机存取存储器(RAM)或闪存;和/或有线/无线通信链路。
安卓(Android)是移动终端领域中常用的一种操作系统。AndroidSo是一种LinuxELF的可执行文件,对So文件的加壳过程中可使用压缩算法对文件中的数据段(Dynamicsection)进行压缩混淆处理,以保证加密的安全性。本发明的发明人在实施上述文件压缩时发现常用的压缩算法会对文件的结构体进行一定的更改,使得在解压缩时,需要对所有的数据段进行遍历扫描以重建数据段的正确顺序,导致解压缩所花费的时间较大。
本发明的发明人提供了至少部分解决上述问题的技术方案。需要说明的是,虽然在以下的描述中主要针对可执行文件的压缩来阐述本公开实施例的技术方案,然而需要注意的是,本公开实施例的技术方案也可以应用于非可执行文件以加快压缩数据的解压缩。
为解决上述问题,本公开的实施例提供了一种数据压缩方法及其设备。该方法包括将要压缩的文件划分为一个或多个代码段,根据预定压缩方案对所述一个或多个代码段中的每个代码段进行压缩,以生成已压缩代码段。该方法还包括针对每个代码段生成索引,所述索引能够表示对应的已压缩代码段。该方法还包括将每个已压缩代码段和与其对应的索引进行组合,以生成压缩文件。
图1示意性示出了根据本公开的实施例的数据压缩方法的流程图。
如图1所示,该方法包括在操作S110,将要压缩的文件划分为一个或多个代码段。
上述划分可根据本领域常用的任何数据/代码段划分方法来执行,或可根据具体的需要来划分。在此不再赘述。通常情况下,要压缩的文件可被划分为一个以上的代码段,但也不排除某些情况(例如,要压缩的文件较小的情形)下,可将整个要压缩的文件划分为一个代码段。
然后,在操作S120,根据预定压缩方案对该一个或多个代码段中的每个代码段进行压缩,以生成已压缩代码段。
这里所述的预定压缩方案可以是本领域中用于文件压缩的任何压缩方案,例如LZ77、LZMA、字典算法、固定位长算法、RLE算法等等。在本公开的实施例中主要使用LZ系列压缩方案(例如LZMA)来进行阐述,然而需要注意的是,本公开实施例中所述的技术方案也可应用于其他任何压缩算法或方案。
例如,可使用LZMA压缩方案来执行数据压缩。如本领域技术人员可知的,作为LZ系列压缩方案的一种,LZMA压缩方案也使用保存未压缩字符的搜索缓存和保存已压缩字符的滑动窗口。本公开实施例的基于LZMA压缩的技术实现可在稍后描述。
在操作S130,针对每个已压缩代码段生成索引,该索引能够表示对应的已压缩代码段。
根据本公开的一些实施例,针对每个已压缩代码段生成索引可包括:使用散列函数对每个已压缩代码段的内容进行处理,以生成所述每个已压缩代码段的内容的散列摘要来作为对应已压缩代码段的索引。将散列摘要作为对应已压缩代码段的索引使得在解压缩时能够经由该散列摘要快速地恢复每个已压缩代码段的内容,使得解压缩更加快捷高效。
在操作S140,将每个已压缩代码段和与其对应的索引进行组合,以生成压缩文件。
由于针对每个已压缩代码段生成索引并通过将已压缩代码段与索引相组合来生成压缩文件,使得在解压缩时,能够根据索引来获得文件的正确的(执行)顺序,减少了解压缩文件所需的时间。
根据本公开的一些实施例,图1所示的将每个已压缩的代码段和与其对应的索引进行组合以生成压缩文件的操作还可包括:将索引集中添加到所有已压缩代码段之后且压缩文件的结束标记之前。当然,将索引添加到压缩文件的其他位置处也是可以的,本公开实施例不限于上述的具体添加位置。
根据本公开的一些实施例,图1所示的方法还可包括在压缩文件的头部添加标记,所述标记指向所添加的索引。由此,在操作(例如点击)压缩文件时,可首先读取该标记,并经由该标记读取压缩文件的例如置于结束标记之前的索引来解压缩该压缩文件。在一些示例中,在对可执行文件进行压缩/解压的情况下,该操作也可导致可执行文件的直接执行。在不同的系统中,该标记可具有不同的实现,且可具有不同的名称。例如在Linux系统中,该标记可以用init函数来实现。其可以调用Linux系统的init进程来实现上述的压缩文件自动解压/执行。该标记在Linux系统中可例如称为链接入口,而在安卓系统中可称为链接索引。然而,需要注意的是,该标记的具体名称和实际实现不限以上所述,而是可采用本领域技术人员可想到或使用的任何名称和实现。
在图1所示的步骤S140之后,可得到根据本公开实施例的压缩文件。图2中示出了这样的一个压缩文件的示例的结构示意图。
如图2所示,压缩文件中包含多个代码段,这些代码段可以是通过任何已知的压缩算法或方案压缩的已压缩代码段。每个已压缩代码段也可称为section实体(SectionEntry),其由头部“local head”和已压缩数据“data”组成。已压缩数据可采用RSA1024算法来进行数据校验。
在压缩文件的结束标记“END”之前存在存放各个已压缩代码段的索引的暂存区“file headers”。该暂存区存储的各个已压缩代码段的索引(section head)可以是各个已压缩代码段的内容(例如,已压缩数据“data”)的散列摘要。通过该暂存区的使用,例如在Linux的init过程中可以直接读取该暂存区中的索引以按照正确的顺序执行各个数据段,而不必遵循线性结构在寻找每个正确的数据段时都对内存进行遍历,减小了时间复杂度对算法性能的影响。
结束标记也可以具有单独的结束结构。这种对每一块结构体进行细分的方式可在执行解压缩的过程中减小复杂度。
在压缩文件的头部可存在着一个标记“init”,其也可被称为索引入口(indexentry),该索引入口可指向上述暂存区。
如上所述,图2中的Section Entry实体可由头部“local head”和已压缩数据“data”组成。其数据结构分别如下:
Section Entry头部的数据结构
当头部标志第3位(掩码0×08)置位时,表示在Section Entry结构的尾部增加一个Data descriptor来记录RSA1024校验位和压缩后大小。在此情况下才会在SectionEntry结构的尾部出现Data descriptor数据。该数据的第一固定值是可选的。
Data descriptor的数据结构
头部结束后是以下所示的数据结构
Section Entry的数据部分的数据结构
需要说明书的是,上述的数据结构仅是可用于本公开实施例所阐述技术方案的数据结构的一些示例,也可以采用本领域技术人员通常使用或容易想到的其他数据结构来实现本公开实施例的技术方案。本发明的范围不受具体数据结构的限制。
下面,将参见图3所示的算法流程图来详细地描述根据本公开实施例的压缩方案。下面的压缩方案中将首先对各个代码段进行初步压缩,以得到初步的压缩结果,且在然后对该初步压缩结果进行霍夫曼编码,以得到霍夫曼编码后的压缩结果(图3中称为压缩后bits),然后如上所述地在该结果前添加标记(图3中称为initdex索引头),在该结果后添加暂存区(图3中称为Enddex链表尾),形成例如可执行的代码段(图3中称为可执行section字段)。需要注意的是,图3所示的方案以可执行ELF文件的压缩为例来阐述本公开实施例的技术方案,然而本公开实施例的技术方案同样适用于非可执行文件。
在根据本公开实施例的下述描述中,在初步压缩时可采用LZ系列的压缩算法(例如,LZ77),然而需要注意的是,其他压缩算法也是可行的。
以LZ系列算法为例,其压缩结果可能出现两种形式:literal,以及distance+length。对于distance+length结果而言,这表明所压缩的字符串在之前已压缩的结果中重复出现,并可通过与之前出现的已压缩结果的距离distance以及该重复出现的字符串的长度来表示。Literal的含义是“原义”,表示没有使用distance+length的方式记录或表示的字符。
如上所述,也可以采用其他压缩算法提取literal、distance和length等数据,而不限于使用LZ系列的压缩算法。
图3所示的示例将距离distance作为一个集合,将原义字符literal和长度length作为一个集合来分别进行霍夫曼编码。如图3所示,对literal/length进行霍夫曼编码得到编码比特流(LIT bits)和码字长度序列序列(section1序列),对distance进行霍夫曼编码得到编码比特流(DIST bits)和码字长度序列(序列section2序列)。
在所产生的section序列中可能出现大段连续的0,因为某些字符或长度不存在,尤其是对英文文本编码的时候,非ASCII字符不会出现。因为length出现较大值的概率较小,其对应的section序列也可能出现大段连续的0。对于distance也存在着同样的情况。这种情况的出现意味着还可以进行进一步的压缩。在本公开的一些实施例中,因此可对所产生的section序列进行能够进一步压缩该大段连续的0的编码(例如游程编码或本领域技术人员所知的其他任何编码方案),以获得分别对应的存储序列。
在图3所示的示例中,可对所产生的该两个存储序列进行又一次霍夫曼编码,得到分别对应于literal/length和distance的压缩码流(存储bits)以及又一个码字长度序列(ccl序列码表3)。可对ccl序列码表3进行例如定长编码或其他任何本领域技术人员所使用或能够想到的编码,以获得最终的压缩后bits。
然后如上所述地在该结果前添加标记(图3中称为initdex索引头),在该结果后添加暂存区(图3中称为Enddex链表尾),形成例如压缩的可执行文件。
需要注意的是,图3所示的编码算法流程图中从初步压缩到压缩后bits的流程是针对要编码的文件(例如,可执行ELF文件)的所有代码段执行的编码压缩流程,而不应将其视为是仅针对一个代码段执行的算法流程。
所产生的压缩码流可采用deflate压缩码流的格式。其格式的示例如图4所示。图4所示的压缩码流可对应于图2所示的压缩后的内容<data>部分。
图4所示的压缩码流格式中各字段的描述如下:
Header:包含压缩码流的一些格式信息
HLIT:记录literal/length码树中码长序列(CL1)个数
HDIST:记录distance码树中码长序列(CL2)个数
HCLEN:记录Huffman码表中码长序列(CCL)个数
CCL:记录Huffman码表中码长序列(CCL)个数
SQ1 bits:存储HLIT
SQ2 bits:存储HDIST
LIT编码流或DIST编码流:经过霍夫曼编码的压缩数据。
当需要进行解压缩时,读取上述压缩码流格式中的“LIT编码流或DIST编码流”字段,并利用霍夫曼码表1进行解码,如果解码得到的整数位于0-255之间,表明所解码的是literal,即未匹配字符,接下来仍然利用霍夫曼码表1进行解码。如果位于257-285之间,则表示length匹配长度,之后需要利用Huffman码表2进行解码,得到distance偏移距离;如果等于256,表示代码段解码结束。
当获得literal、distance和length等数据后,可通过与图3所示的初步压缩所使用的压缩方法相对应的解压缩方法来恢复原始数据。
在本公开的上述实施例中使用LZ系列的算法(例如LZMA算法)来进行阐述。该算法采用了(off,len,c)三元组来表示要压缩的字符/字符串。该三元组定义如下:
(1)off
off是要压缩的字符串在滑动窗口内的偏移(即,上述实施例中所述的距离distance)。通常,该偏移接近窗口尾部的情况要多于接近窗口头部的情况,这是因为字符串在与其接近的位置容易找到匹配的字符串串。对于本领域中使用的一般窗口大小(例如4096字节)而言,偏移值基本是均匀分布的,因此可以用同定的位数来表示。
(2)len
len为要压缩的字符串的长度,其在大多数时候不会太大,少数情况下可能会发生大字符串匹配的情况,因此可以使用变长编码的方式来表示该长度值。在本公开的一些实施例中可使用Golomb编码,其对于较小的数用较短的编码,对较大的数用较大的编码表示。
(3)c
c为搜索缓存中的不匹配字符。可直接使用8个二进制位来对其编码。
本发明的发明人在实践LZMA压缩方案时发现LZMA的原始算法采用三元组输出每一个匹配串以及其后续字符,即使没有匹配,仍需要输出一个len=0的三元组来表示单个字符。因此这种方式对于未发生匹配的情况而言效率不高。
为此,根据本公开的一些实施例,提出了一种基于LZMA的改进压缩算法。在该算法中,将每一个压缩输出分成匹配串和单个字符两种类型,并在输出压缩结果之前输出一个二进制位对该两种类型加以区分。例如,输出0表示要输出的是匹配串,输出1表示要输出的是单个字符。之后,如果要输出的是单个字符,可以直接输出该字符的字节值,这需要8个二进制位。也就是说,输出一个单个字符共需要9个二进制位。如果要输出的是匹配串,则仅需输出off和len。off可以用定长编码,也可以用变长编码。Len可以用变长编码。如上所述,在本公开的该实施例中,偏移off与距离distance可以互换使用。
在本公开的一些实施例中,可以对匹配长度加以限制。例如,只有3个字符及以上的匹配才可被视为为字符串匹配,因为对于2个字符的匹配串,使用匹配串的输出方式不一定比直接输出2个单个字符(在本实施例中,共需2*9=18位)节省空间。在此情况下,用于区分输出类型的二进制为1可表示要输出的是未匹配的1个或2个字符。
通过上述的算法,对于输出单个和/或2个字符的情况,可以节省提高压缩的效率并节约存储空间。此外,对于匹配字符串而言,由于不强求每次都外带一个后续字符c,也可以适应一些较长匹配的情况。
下面参考图5,结合具体实施例对用于实现图1所示的方法的设备进行阐述。
图5示意性示出了根据本公开实施例的用于数据压缩的设备的结构示意图。该设备包括代码划分模块510、代码段压缩模块520、索引生成模块530以及压缩文件生成模块540。代码划分模块510用于将要压缩的文件划分为一个或多个代码段。代码段压缩模块520用于根据预定压缩方案对所述一个或多个代码段中的每个代码段进行压缩,以生成已压缩代码段。索引生成模块530用于针对每个已压缩代码段生成索引,该索引能够表示对应的已压缩代码段。压缩文件生成模块540用于将每个已压缩代码段和与其对应的索引进行组合,以生成压缩文件。
根据本公开的一些实施例,压缩文件生成模块540可用于将索引集中添加到所有已压缩代码段之后且压缩文件的结束标记之前。
根据本公开的一些实施例,索引生成模块530还可用于使用散列函数对每个已压缩代码段的内容进行处理,以生成每个已压缩代码段的内容的散列摘要来作为对应已压缩代码段的索引。
根据本公开的一些实施例,图5所示的设备还可包括标记添加模块550,其用于在压缩文件的头部添加标记,所述标记指向所添加的索引。
根据本公开的一些实施例,上述预定压缩方案是LZMA压缩方案,LZMA压缩方案使用保存未压缩字符的搜索缓存和保存已压缩字符的滑动窗口。在该情况下,代码段压缩模块520可用于:针对每个代码段,当搜索缓存中即将被压缩的不少于第一数量的字符所组成的字符串在滑动窗口中存在相同的字符串时,输出包括指示字符串匹配的第一标记位、字符串在滑动窗口中的起始位置以及字符串的长度在内的代码。代码段压缩模块520还可用于:针对每个代码段,当搜索缓存中即将被压缩的字符在所述滑动窗口中不存在相同的字符时,或者当搜索缓存中即将被压缩的第二数量的字符所组成的字符串在滑动窗口中存在相同的字符串且第二数量小于第一数量时,输出包括指示字符串不匹配的第二标记位和即将被压缩的字符在内的代码。在该方案中,第一数量可以是3,第二数量可以是小于3的数量。
根据本公开的一些实施例,代码段压缩模块520还可用于:针对每个代码段,在使用LZMA压缩方案压缩之后,对各个字符串在滑动窗口中的起始位置进行第一霍夫曼编码以获得第一序列,对各个字符串的长度以及被认为不匹配的字符或字符串中的字符进行第二霍夫曼编码以获得第二序列,以及对所述第一序列和所述第二序列进行第三霍夫曼编码,以得到所述已压缩代码段。
图6示意性示出了根据本公开的另一实施例的用于数据压缩的设备的框图。图6示出的设备仅仅是一个示例,不应对本公开实施例的功能和使用范围带来任何限制。
如图6所示,根据该实施例的设备600包括中央处理单元(CPU)601,其可以根据存储在只读存储器(ROM)602中的程序或者从存储部分608加载到随机访问存储器(RAM)603中的程序而执行各种适当的动作和处理。在RAM 603中,还存储有设备600操作所需的各种程序和数据。CPU 601、ROM 602以及RAM 603通过总线604彼此相连。输入/输出(I/O)接口605也连接至总线604。
设备600还可以包括连接至I/O接口605的以下部件中的一项或多项:包括键盘、鼠标等的输入部分606;包括诸如阴极射线管(CRT)、液晶显示器(LCD)等以及扬声器等的输出部分607;包括硬盘等的存储部分608;以及包括诸如LAN卡、调制解调器等的网络接口卡的通信部分609。通信部分609经由诸如因特网的网络执行通信处理。驱动器610也根据需要连接至I/O接口605。可拆卸介质611,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器610上,以便于从其上读出的计算机程序根据需要被安装入存储部分608。
特别地,根据本公开的实施例,上文参考流程图描述的过程可以被实现为计算机软件程序。例如,本公开的实施例包括一种计算机程序产品,其包括承载在计算机可读介质上的计算机程序,该计算机程序包含用于执行流程图所示的方法的程序代码。在这样的实施例中,该计算机程序可以通过通信部分609从网络上被下载和安装,和/或从可拆卸介质611被安装。在该计算机程序被中央处理单元(CPU)601执行时,执行本公开实施例的设备中限定的上述功能。
本公开的实施例还提供了与图1所示的数据压缩方法对应的数据解压缩方法。图7示意性示出了根据本公开的实施例的数据解压缩方法的流程图。该方法可用于对压缩文件进行解压缩,其中,压缩文件可包括一个或多个已压缩代码段以及与每个已压缩代码段对应的索引,该索引能够表示对应的已压缩代码段。
如图7所示,该方法包括在操作S710读取索引。
根据本公开的一些实施例,压缩文件还可以包括位于压缩文件头部的标记(例如图2中所示的init),该标记可指向上述索引。在此情况下,读取索引可包括读取标记以获得索引。
然后,在操作S720,根据索引获取该一个或多个已压缩代码段。
根据本公开的一些实施例,索引可以是对应已压缩代码段的内容的散列摘要。在此情况下,根据索引获取所述一个或多个已压缩代码段可包括根据散列摘要恢复对应的已压缩代码段的内容。
在操作S730,根据预定解压缩方案对该一个或多个已压缩代码段进行解压缩。
这里所说的预定解压缩方案是与压缩侧用于进行代码段压缩的预定压缩方案相对应的解压缩方案。
例如,当采用图3所示的算法来对代码段进行压缩,并产生图4所示格式的压缩码流时,对于具体的已压缩代码段,可读取图4所示压缩码流格式中的“LIT编码流或DIST编码流”字段,并利用霍夫曼码表1进行解码,如果解码得到的整数位于0-255之间,表明所解码的是literal,即未匹配字符,接下来仍然利用霍夫曼(Huffman)码表1进行解码。如果位于257-285之间,则表示length匹配长度,之后需要利用Huffman码表2进行解码,得到distance偏移距离;如果等于256,表示代码段解码结束。
在获得literal、distance和length等数据之后,可通过与图3所示的初步压缩所使用的压缩方法相对应的解压缩方法来恢复原始数据。例如,如果在压缩侧使用LZMA压缩方案,步骤S730所示的预定解压缩方案则可以是对应的解压缩方案。由于使用字符串匹配情况下的distance和length参数以及字符串不匹配情况下的literal便足以恢复原始数据,当在压缩侧使用对LZMA原始算法的改进(即,使用二进制位来区分字符串匹配和不匹配而不使用(off,len,c)三元组)来进行压缩的情况下,在解压缩侧不需要进行特别的改变,可使用与LZMA原始算法相对应的解压缩方法。
然后,在操作S740,将解压缩的每个代码段进行组合,以形成解压缩的文件。
例如,可按照代码段的解压缩顺序来组合每个代码段。
下面参考图8,结合具体实施例对用于实现图7所示的方法的设备进行阐述。
图8示意性示出了根据本公开实施例的用于数据解压缩的设备的结构示意图。该设备可用于对压缩文件进行解压缩,其中,压缩文件包括一个或多个已压缩代码段以及与每个已压缩代码段对应的索引,该索引能够表示对应的已压缩代码段。
如图8所示,该设备包括索引获取模块810、代码段获取模块820、解压缩模块830和文件生成模块840。索引获取模块810用于读取索引。代码段获取模块820用于根据索引获取该一个或多个已压缩代码段。解压缩模块830用于根据预定解压缩方案对该一个或多个已压缩代码段进行解压缩。文件生成模块840用于将解压缩的每个代码段进行组合,以形成解压缩的文件。
根据本公开的一些实施例,压缩文件还可以包括位于压缩文件头部的标记,该标记指向上述索引。在此情况下,索引获取模块810还用于读取标记以获得索引。
根据本公开的一些实施例,索引可以是对应已压缩代码段的内容的散列摘要。在此情况下,代码段获取模块820还可用于根据散列摘要恢复对应的已压缩代码段的内容。
解压缩模块830可例如根据图7的操作S730所示的方法来对已压缩代码段进行解压缩,在此不再赘述。
图9示意性示出了根据本公开的另一实施例的用于数据压缩的设备的框图。图9示出的设备仅仅是一个示例,不应对本公开实施例的功能和使用范围带来任何限制。
如图9所示,根据该实施例的设备900包括中央处理单元(CPU)901,其可以根据存储在只读存储器(ROM)902中的程序或者从存储部分908加载到随机访问存储器(RAM)903中的程序而执行各种适当的动作和处理。在RAM 903中,还存储有设备900操作所需的各种程序和数据。CPU 901、ROM 902以及RAM 903通过总线904彼此相连。输入/输出(I/O)接口905也连接至总线904。
设备900还可以包括连接至I/O接口905的以下部件中的一项或多项:包括键盘、鼠标等的输入部分906;包括诸如阴极射线管(CRT)、液晶显示器(LCD)等以及扬声器等的输出部分907;包括硬盘等的存储部分908;以及包括诸如LAN卡、调制解调器等的网络接口卡的通信部分909。通信部分909经由诸如因特网的网络执行通信处理。驱动器910也根据需要连接至I/O接口905。可拆卸介质911,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器910上,以便于从其上读出的计算机程序根据需要被安装入存储部分908。
特别地,根据本公开的实施例,上文参考流程图描述的过程可以被实现为计算机软件程序。例如,本公开的实施例包括一种计算机程序产品,其包括承载在计算机可读介质上的计算机程序,该计算机程序包含用于执行流程图所示的方法的程序代码。在这样的实施例中,该计算机程序可以通过通信部分909从网络上被下载和安装,和/或从可拆卸介质911被安装。在该计算机程序被中央处理单元(CPU)901执行时,执行本公开实施例的设备中限定的上述功能。
需要说明的是,本公开所示的计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质或者是上述两者的任意组合。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本公开中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。而在本公开中,计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:无线、电线、光缆、RF等等,或者上述的任意合适的组合。
附图中的流程图和框图,图示了按照本公开各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,上述模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图或流程图中的每个方框、以及框图或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
作为另一方面,本公开还提供了一种计算机可读介质,该计算机可读介质可以是上述实施例中描述的设备中所包含的;也可以是单独存在,而未装配入该设备中。上述计算机可读介质承载有一个或者多个程序,当上述一个或者多个程序被一个该设备执行时,使得该设备执行图1或图7所示的方法。
图10示意性示出了根据本公开实施例的可以应用根据图1或图7所示方法的示例性系统架构1000。
如图10所示,根据该实施例的系统架构1000可以包括终端设备1001、1002、1003,网络1004和服务器1005。网络1004用以在终端设备1001、1002、1003和服务器1005之间提供通信链路的介质。网络1004可以包括各种连接类型,例如有线、无线通信链路或者光纤电缆等等。
用户可以使用终端设备1001、1002、1003通过网络1004与服务器1005交互,以接收或发送消息等。终端设备1001、1002、1003上可以安装有各种通讯客户端应用,例如购物类应用、网页浏览器应用、搜索类应用、即时通信工具、邮箱客户端、社交平台软件等(仅为示例)。
终端设备1001、1002、1003可以是具有显示屏并且支持网页浏览的各种电子设备,包括但不限于智能手机、平板电脑、膝上型便携计算机和台式计算机等等。
服务器1005可以是提供各种服务的服务器,例如对用户利用终端设备1001、1002、1003所浏览的购物类网站提供支持的后台管理服务器(仅为示例)。后台管理服务器可以对接收到的产品信息查询请求等数据进行分析等处理,并将处理结果(例如目标推送信息、产品信息--仅为示例)反馈给终端设备。
需要说明的是,本公开实施例所提供的网页生成方法一般可以由服务器1005执行,相应地,网页生成装置一般可以设置于服务器1005中。
本公开实施例所提供的图1和图7所示的方法可在终端设备1001、1002、1003和/或服务器1005中的任一者在执行,也可通过网络1004在终端设备1001、1002、1003和/或服务器1005之间传递。
应该理解,图10中的终端设备、网络和服务器的数目仅仅是示意性的。根据实现需要,可以具有任意数目的终端设备、网络和服务器。
以上对本公开的实施例进行了描述。但是,这些实施例仅仅是为了说明的目的,而并非为了限制本公开的范围。尽管在以上分别描述了各实施例,但是这并不意味着各个实施例中的措施不能有利地结合使用。本公开的范围由所附权利要求及其等同物限定。不脱离本公开的范围,本领域技术人员可以做出多种替代和修改,这些替代和修改都应落在本公开的范围之内。
Claims (16)
1.一种用于数据压缩的方法,包括:
将要压缩的文件划分为一个或多个代码段;
根据预定压缩方案对所述一个或多个代码段中的每个代码段进行压缩,以生成已压缩代码段;
针对每个已压缩代码段生成索引,所述索引能够表示对应的已压缩代码段;以及
将每个已压缩代码段和与其对应的索引进行组合,以生成压缩文件,
其中,针对每个已压缩代码段生成索引包括:使用散列函数对每个已压缩代码段的内容进行处理,以生成所述每个已压缩代码段的内容的散列摘要来作为对应已压缩代码段的索引,
其中,所述预定压缩方案是LZMA压缩方案,所述LZMA压缩方案使用保存未压缩字符的搜索缓存和保存已压缩字符的滑动窗口,则根据预定压缩方案对所述一个或多个代码段中的每个代码段进行压缩包括:
针对每个代码段,当所述搜索缓存中即将被压缩的不少于第一数量的字符所组成的字符串在所述滑动窗口中存在相同的字符串时,输出包括指示字符串匹配的第一标记位、所述字符串在所述滑动窗口中的起始位置以及所述字符串的长度在内的代码;以及
针对每个代码段,当所述搜索缓存中即将被压缩的字符在所述滑动窗口中不存在相同的字符时,或者当所述搜索缓存中即将被压缩的第二数量的字符所组成的字符串在所述滑动窗口中存在相同的字符串且所述第二数量小于所述第一数量时,输出包括指示字符串不匹配的第二标记位和即将被压缩的字符在内的代码。
2.根据权利要求1所述的方法,其中,将每个已压缩的代码段和与其对应的索引进行组合以生成压缩文件包括:
将所述索引集中添加到所有已压缩代码段之后且所述压缩文件的结束标记之前。
3.根据权利要求1所述的方法,还包括:
在所述压缩文件的头部添加标记,所述标记指向所添加的索引。
4.根据权利要求1所述的方法,在使用LZMA压缩方案压缩之后,针对每个代码段,所述方法还包括:
对各个字符串在滑动窗口中的起始位置进行第一霍夫曼编码,以获得第一序列;
对各个字符串的长度以及被认为不匹配的字符或字符串中的字符进行第二霍夫曼编码,以获得第二序列;以及
对所述第一序列和所述第二序列进行第三霍夫曼编码,以得到所述已压缩代码段。
5.一种用于数据压缩的设备,包括:
代码划分模块,用于将要压缩的文件划分为一个或多个代码段;
代码段压缩模块,用于根据预定压缩方案对所述一个或多个代码段中的每个代码段进行压缩,以生成已压缩代码段;
索引生成模块,用于针对每个已压缩代码段生成索引,所述索引能够表示对应的已压缩代码段;以及
压缩文件生成模块,用于将每个已压缩代码段和与其对应的索引进行组合,以生成压缩文件,
其中,所述索引生成模块还用于:使用散列函数对每个已压缩代码段的内容进行处理,以生成所述每个已压缩代码段的内容的散列摘要来作为对应已压缩代码段的索引,
其中,所述预定压缩方案是LZMA压缩方案,所述LZMA压缩方案使用保存未压缩字符的搜索缓存和保存已压缩字符的滑动窗口,所述代码段压缩模块用于:
针对每个代码段,当所述搜索缓存中即将被压缩的不少于第一数量的字符所组成的字符串在所述滑动窗口中存在相同的字符串时,输出包括指示字符串匹配的第一标记位、所述字符串在所述滑动窗口中的起始位置以及所述字符串的长度在内的代码;以及
针对每个代码段,当所述搜索缓存中即将被压缩的字符在所述滑动窗口中不存在相同的字符时,或者当所述搜索缓存中即将被压缩的第二数量的字符所组成的字符串在所述滑动窗口中存在相同的字符串且所述第二数量小于第一数量时,输出包括指示字符串不匹配的第二标记位和即将被压缩的字符在内的代码。
6.根据权利要求5所述的设备,其中,
所述压缩文件生成模块用于:将所述索引集中添加到所有已压缩代码段之后且所述压缩文件的结束标记之前。
7.根据权利要求5所述的设备,还包括:
标记添加模块,用于在所述压缩文件的头部添加标记,所述标记指向所添加的索引。
8.根据权利要求5所述的设备,其中,所述代码段压缩模块还用于:
针对每个代码段,在使用LZMA压缩方案压缩之后,对各个字符串在滑动窗口中的起始位置进行第一霍夫曼编码以获得第一序列,对各个字符串的长度以及被认为不匹配的字符或字符串中的字符进行第二霍夫曼编码以获得第二序列,以及对所述第一序列和所述第二序列进行第三霍夫曼编码,以得到所述已压缩代码段。
9.一种用于数据压缩的设备,包括:
存储器,存储计算机可执行指令;以及
处理器,执行所述存储器存储的计算机可执行指令,以执行根据权利要求1至4中任一项所述的方法。
10.一种计算机可读存储介质,其上存储有可执行指令,该指令被处理器执行时使处理器执行根据权利要求1至4中任一项所述的方法。
11.一种用于数据解压缩的方法,用于对压缩文件进行解压缩,所述压缩文件包括一个或多个已压缩代码段以及与每个已压缩代码段对应的索引,所述索引能够表示对应的已压缩代码段,所述方法包括:
读取所述索引;
根据所述索引获取所述一个或多个已压缩代码段;
根据预定解压缩方案对所述一个或多个已压缩代码段进行解压缩;以及
将解压缩的每个代码段进行组合,以形成解压缩的文件,
其中,所述索引是对应已压缩代码段的内容的散列摘要,根据所述索引获取所述一个或多个已压缩代码段包括:根据所述散列摘要恢复对应的已压缩代码段的内容。
12.根据权利要求11所述的方法,其中,所述压缩文件还包括位于所述压缩文件头部的标记,所述标记指向所述索引,
读取所述索引包括:读取所述标记以获得所述索引。
13.一种用于数据解压缩的设备,用于对压缩文件进行解压缩,所述压缩文件包括一个或多个已压缩代码段以及与每个已压缩代码段对应的索引,所述索引能够表示对应的已压缩代码段,所述设备包括:
索引获取模块,用于读取所述索引;
代码段获取模块,用于根据所述索引获取所述一个或多个已压缩代码段;
解压缩模块,用于根据预定解压缩方案对所述一个或多个已压缩代码段进行解压缩;以及
文件生成模块,用于将解压缩的每个代码段进行组合,以形成解压缩的文件,
其中,所述索引是对应已压缩代码段的内容的散列摘要,所述代码段获取模块还用于根据所述散列摘要恢复对应的已压缩代码段的内容。
14.根据权利要求13所述的设备,其中,所述压缩文件还包括位于所述压缩文件头部的标记,所述标记指向所述索引,所述索引获取模块还用于读取所述标记以获得所述索引。
15.一种用于数据解压缩的设备,所述设备包括:
存储器,存储计算机可执行指令;以及
处理器,执行所述存储器存储的计算机可执行指令,以执行根据权利要求11至12中任一项所述的方法。
16.一种计算机可读存储介质,其上存储有可执行指令,该指令被处理器执行时使处理器执行根据权利要求11至12中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710535377.0A CN107395209B (zh) | 2017-07-03 | 2017-07-03 | 数据压缩方法、数据解压缩方法及其设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710535377.0A CN107395209B (zh) | 2017-07-03 | 2017-07-03 | 数据压缩方法、数据解压缩方法及其设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107395209A CN107395209A (zh) | 2017-11-24 |
CN107395209B true CN107395209B (zh) | 2020-11-24 |
Family
ID=60334786
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710535377.0A Active CN107395209B (zh) | 2017-07-03 | 2017-07-03 | 数据压缩方法、数据解压缩方法及其设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN107395209B (zh) |
Families Citing this family (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2019036810A (ja) * | 2017-08-14 | 2019-03-07 | 富士通株式会社 | データ圧縮装置、データ復元装置、データ圧縮プログラム、データ復元プログラム、データ圧縮方法、およびデータ復元方法 |
CN107861949B (zh) * | 2017-11-22 | 2020-11-20 | 珠海市君天电子科技有限公司 | 文本关键词的提取方法、装置及电子设备 |
CN107977442B (zh) * | 2017-12-08 | 2020-08-07 | 北京希嘉创智教育科技有限公司 | 日志文件压缩及解压缩方法、电子设备和可读存储介质 |
CN110377288A (zh) * | 2018-04-13 | 2019-10-25 | 赛灵思公司 | 神经网络压缩编译器及其编译压缩方法 |
CN109582653B (zh) * | 2018-11-14 | 2020-12-08 | 网易(杭州)网络有限公司 | 文件的压缩、解压缩方法及设备 |
US10476518B1 (en) * | 2018-12-06 | 2019-11-12 | Nyquist Semiconductor Limited | Hardware friendly data compression |
CN111294057A (zh) * | 2018-12-07 | 2020-06-16 | 上海寒武纪信息科技有限公司 | 数据压缩方法、编码电路和运算装置 |
CN109936372B (zh) * | 2019-02-18 | 2020-08-25 | 北京创鑫旅程网络技术有限公司 | 压缩和解压缩经纬度数据的方法、装置和存储介质 |
CN111884660B (zh) * | 2020-07-13 | 2022-06-17 | 山东云海国创云计算装备产业创新中心有限公司 | 一种哈夫曼编码设备 |
CN112527736B (zh) * | 2020-12-09 | 2024-03-29 | 中国科学院深圳先进技术研究院 | 基于dna的数据存储方法、数据恢复方法及终端设备 |
CN114172521B (zh) * | 2022-02-08 | 2022-05-10 | 苏州浪潮智能科技有限公司 | 一种解压缩芯片验证方法、装置、设备及可读存储介质 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101355364A (zh) * | 2008-09-08 | 2009-01-28 | 北大方正集团有限公司 | 文件压缩方法及装置、文件解压缩方法及装置 |
CN102831140A (zh) * | 2012-05-18 | 2012-12-19 | 浙江大学 | 一种fpga中mac地址查找表的实现方法 |
CN102841907A (zh) * | 2011-06-24 | 2012-12-26 | 环达电脑(上海)有限公司 | 数据压缩和解压缩的处理方法 |
CN104868922A (zh) * | 2014-02-24 | 2015-08-26 | 华为技术有限公司 | 数据压缩方法及装置 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7133565B2 (en) * | 2000-08-25 | 2006-11-07 | Canon Kabushiki Kaisha | Image processing apparatus and method |
-
2017
- 2017-07-03 CN CN201710535377.0A patent/CN107395209B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101355364A (zh) * | 2008-09-08 | 2009-01-28 | 北大方正集团有限公司 | 文件压缩方法及装置、文件解压缩方法及装置 |
CN102841907A (zh) * | 2011-06-24 | 2012-12-26 | 环达电脑(上海)有限公司 | 数据压缩和解压缩的处理方法 |
CN102831140A (zh) * | 2012-05-18 | 2012-12-19 | 浙江大学 | 一种fpga中mac地址查找表的实现方法 |
CN104868922A (zh) * | 2014-02-24 | 2015-08-26 | 华为技术有限公司 | 数据压缩方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN107395209A (zh) | 2017-11-24 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107395209B (zh) | 数据压缩方法、数据解压缩方法及其设备 | |
US7924183B2 (en) | Method and system for reducing required storage during decompression of a compressed file | |
US10187081B1 (en) | Dictionary preload for data compression | |
US8456332B2 (en) | Systems and methods for compression of logical data objects for storage | |
US20110181448A1 (en) | Lossless compression | |
US9225355B2 (en) | Boosting decompression in the presence of reoccurring Huffman trees | |
US9806741B1 (en) | Character conversion | |
US9665590B2 (en) | Bitmap compression for fast searches and updates | |
Xue et al. | An optimized data hiding scheme for deflate codes | |
CN114337678A (zh) | 数据压缩方法、装置、设备及存储介质 | |
Funasaka et al. | Adaptive loss‐less data compression method optimized for GPU decompression | |
US20100321218A1 (en) | Lossless content encoding | |
US20220005229A1 (en) | Point cloud attribute encoding method and device, and point cloud attribute decoding method and devcie | |
US20200349116A1 (en) | System and method for encoding-based deduplication | |
US11360954B2 (en) | System and method for hash-based entropy calculation | |
US10990565B2 (en) | System and method for average entropy calculation | |
US8593310B1 (en) | Data-driven variable length encoding of fixed-length data | |
US20170048303A1 (en) | On the fly statistical delta differencing engine | |
CN111967001A (zh) | 一种基于双容器的解码与编码安全隔离方法 | |
US10168909B1 (en) | Compression hardware acceleration | |
Reddy et al. | A novel approach of lossless image compression using hashing and Huffman coding | |
CN115190182B (zh) | 一种适用于北斗系统的数据无损压缩方法、装置及设备 | |
CN117394868B (zh) | 数据处理方法和数据处理装置 | |
CN114070471B (zh) | 一种测试数据包传输方法、装置、系统、设备和介质 | |
US10963437B2 (en) | System and method for data deduplication |
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 |