CN103618554B - 基于字典的内存页面压缩方法 - Google Patents
基于字典的内存页面压缩方法 Download PDFInfo
- Publication number
- CN103618554B CN103618554B CN201310643898.XA CN201310643898A CN103618554B CN 103618554 B CN103618554 B CN 103618554B CN 201310643898 A CN201310643898 A CN 201310643898A CN 103618554 B CN103618554 B CN 103618554B
- Authority
- CN
- China
- Prior art keywords
- new
- byte
- character
- length
- record
- 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.)
- Expired - Fee Related
Links
Landscapes
- Compression, Expansion, Code Conversion, And Decoders (AREA)
Abstract
本发明公开了一种数据处理技术领域基于字典的内存页面压缩方法,主要解决目前压缩方法对内存页面压缩速度低的问题。主要特点为:以四字节为基本单元来压缩、解压缩内存页面数据;设计了新哈希函数和适合压缩内存页面的压缩格式。本发明的字典是用关键值访问的哈希表,从输入数据流中读入四个字节,用前两个字节做异或得到新字节A,用后两个字节做异或得到新字节B,用A的低位2比特与B的高位2比特做异或得到14比特的关键值;新压缩格式为:首字节前4比特记录重复字符长度,后4比特记录新四字符长度;从第二个字节记录剩余新四字符长度,再记录新四字符;然后记录内存页面剩余重复四字节的长度和指回距离。本发明编码简单,解码快速。
Description
技术领域
本发明属于数据处理技术领域,涉及设备内存的数据压缩方法。本发明在数据压缩时根据内存数据的特征采用新的数据压缩格式提高了压缩的速度,可用在内存受限的嵌入式移动设备中。
背景技术
近年来,随着移动互联网的发展,移动设备越来越成为人们不可或缺的一种通信工具。由于移动设备的内存受限,如果能对其内存数据进行压缩,省出内存空间,则可以提高设备的整体性能。现代社会信息量的不断增长,人们对计算机系统的性能也提出了更高的要求,如更高的速度、更低的耗能、更小的体积、能存取更多的信息等等。为了达到上面的各种性能要求,人们提出了各种改进的方法。其中,比较廉价的改进方法之一是数据压缩技术。
Lempel和Ziv于1977年提出了一种高效率的无失真压缩技术,即LZ77,该压缩算法的主要原理是利用较短的标记代表前面出现过的重复字串,标记格式为(重复长度,指回距离),如abcdekabcdeha,则可以编码成abcdek(5,6)ha表示,这样从整体上而言,较短的信息代替较长的信息,从而达到了压缩的效果。1982年,JamesStorer和ThomasSzymanski在LZ77基础上将算法改进,提高了压缩率,提出了LZSS算法。后来Lempel-Ziv-Oberhumer又在LZSS的基础上将算法做了改进,提高了压缩速度,提出了LZO算法。LZO算法是一种基于字典的无损的数据压缩算法,具有压缩速度快、即时性的特点。该算法根据重复字符个数和指回距离设计了五种压缩格式,通过压缩格式的首字节大小区分这五种不同的格式。其主要步骤是(1)读取移动设备的内存数据与内存数据的长度;(2)判断所读数据是否为新数据,若所读数据没有记录在字典中,则判为新数据,并把新数据记入字典中,继续读取内存数据,直到未出现新数据为止;(3)若所读数据已记录在字典中,则根据重复数据的长度和指回距离进行压缩编码;(4)判断编码位置是否为内存数据结尾,若是则输出压缩后的数据和数据长度,并记录结束标志,否则返回步骤(2)继续读入新数据。该方法存在的不足之处是,目前32位系统是计算机的主流系统,考虑内存对齐的影响,内存中的数据绝大多数是以4字节为单位来写入的,而LZO算法是以一个字节为单位并不是完全适合压缩内存数据,这将花费更多的时间;LZO初始设计目的是压缩长度不定的数据,而对于4K大小的内存页面,LZO的压缩格式并不适用。
发明内容
本发明的目的在于克服上述已有技术的不足,提出了一种基于字典的内存页面压缩方法,以能够更快速的压缩与解压缩内存页面,从而减少内存数据存取的延迟。
实现本发明的技术方案是:根据内存页面的数据特征,设计一种新的哈希函数和内存页面的压缩格式(解压缩格式相同),以四字节为基本单元对内存页面进行压缩编码和解压缩,具体步骤如下:
(1)读取移动设备中的内存数据与内存数据的长度;
(2)判断所读数据是否为新数据,若所读数据没有记录在字典中,则判为新数据,并把该新数据记入字典中,继续读取内存数据,直到未出现新数据为止;
(3)若所读数据已记录在字典中,则对所读数据用新的压缩格式进行压缩编码和解压缩;
(4)判断是否编码到内存数据结尾,若是则输出压缩后的数据和数据长度,并记录结束标志,否则返回步骤(2),继续读入新数据;
所述步骤(2)中的字典是根据关键值直接访问的哈希表,关键值是通过哈希函数计算得出,哈希函数的设计为:从输入数据流中读入四个字节,用前两个字节做异或操作得到新字节A,用后两个字节做异或操作得到新字节B,用新字节A的低位2比特与B的高位2比特做异或操作得到14比特的关键值;
所述步骤(3)中的新的压缩格式以四字节为基本单元对内存页面压缩编码和解码,其格式为:
1)首字节前4个比特记录重复四字符的长度,后4个比特记录新四字符的长度;
2)从第二个字节开始记录剩余的新四字符长度,然后记录新四字符;
3)在步骤2)新四字符记录完成之后,再记录内存页面剩余的重复四字符的长度和指回距离。指回距离是当前的重复四字符的位置与哈希表里记录的上一次四字符位置之间的距离。
本发明中内存页面的压缩编码过程描述如下:
1.1)先用首字节后4比特记录新四字符的长度,如果新四字符长度大于14,则首字节后4比特用15作为标记,从第二个字节开始记录剩余的新四字符长度,如果剩余的新四字符长度大于255,则记录一个字节0并将长度减255,直到剩余新四字符长度小于255,记录此剩余新四字符长度;
1.2)在步骤1.1)新四字符长度记录完成之后,记录新四字符;
1.3)用首字节前4比特记录重复四字符的长度,如果重复四字符长度大于14,则用首字节前4比特用15作为标记,然后记录剩余的重复四字符长度。如果剩余的重复四字符长度大于255,则记录一个字节0并将长度减255,直到剩余重复四字符长度小于255,记录此剩余重复四字符长度;
1.4)在步骤1.3)完成之后,记录重复四字符的指回距离。
本发明中内存页面的解压缩过程描述如下:
2.1)读取压缩格式的首字节,判断首字节后4比特的大小,若小于15则为新四字符的长度,并输出新四字符;若等于15,新四字符长度加14,从第二个字节开始,若为字节0则新四字符长度加255,直到所读字节为非0,将新四字符长度加上此非0字节,并输出新四字符;
2.2)判断步骤2.1)中首字节前4比特的大小,若小于15则为重复四字符的长度;反之,若等于15,重复四字符长度加14,继续读取,若字节为0,则重复四字符长度并加255,直到所读字节为非0,将重复四字符长度加上此非0字节;
2.3)读取压缩格式的最后一个字节,即为重复四字符的指回距离,根据重复四字符的长度,输出重复四字符。
与现有技术相比,本发明具有如下优点:
与目前的LZO无损压缩算法相比,本发明所采用的新压缩格式简单,对内存页面数据的压缩与解压缩速度较快,同时压缩率基本相当,可以大幅提高移动设备的运行效率,测试结果也证明压缩时间与解压缩时间都提高了60%。
附图说明
图1是本发明中的压缩和解压缩格式图;
图2是本发明的压缩流程图;
图3是本发明的解压缩流程图;
具体实施方式
下面结合图1对本发明的压缩和解压缩格式作进一步详细描述:
1)用首字节前4个比特记录重复四字符的长度,后4个比特记录新四字符的长度;
2)如果新四字符长度大于14,则首字节后4比特用15作为标记,从第二个字节开始记录剩余的新四字符长度。如果剩余的新四字符长度大于255,则记录一个字节0并长度减去255,直到剩余新四字符长度小于255,同时记录此剩余新四字符长度,新四字符长度记录完成之后,然后记录新四字符;
3)如果重复四字符长度小于等于14,则用步骤1)中首字节前4比特表示重复四字符长度;如果重复四字符长度大于14,则首字节前4比特用15作为标记,然后记录剩余的重复四字符长度,如果剩余的重复四字符长度大于255,则记录一个字节0并长度减去255,直到剩余重复四字符长度小于255,同时记录此剩余重复四字符长度;
4)在步骤3)完成之后,记录重复四字符的指回距离。
下面结合图2对本发明压缩编码的实施过程作进一步详细描述:
步骤一:从输入数据流中读入四个字符,做第一次哈希运算,进入步骤二;
步骤二:判断四字节的位置是否合法,若合法进入步骤三,若不合法更新哈希表,返回步骤一;
步骤三:判断哈希表所存位置的数据是否与读入四字符是否相同,若相同进入步骤六,若不同进入步骤四;
步骤四:做第二次哈希运算,判断四字符位置是否合法,若合法进入步骤五,若不合法更新哈希表,返回步骤一;
步骤五:判断哈希表所存位置的数据是否与读入四字符是否相同,若相同进入步骤六,若不同更新哈希表,返回步骤一;
步骤六:计算新四字符长度,判断是否长于14,若长于则进入步骤七,否则直接用首字节记录,进入步骤八;
步骤七:判断新四字符长度是否长于255,若是则记录为一个字节0,同时长度减255,直到新四字符长度小于255,最后记录剩余新四字符长度,进行步骤八;
步骤八:记录新四字符数据,进入步骤九;
步骤九:计算重复四字符个数,判断是否长于14,若是则进入步骤十,否则直接用首字节记录,进入步骤十;
步骤十:判断重复四字符长度是否长于255,若是则记录为一个字节0,同时长度减255,直到重复四字符个数小于255,最后记录剩余重复四字符长度,进入步骤十一;
步骤十一:计算与记录指回距离;判断是否编码到结尾,若是则记录剩余新四字符,输出编码长度;否则进入步骤一。
下面结合附图3对本发明解压缩的实施过程作进一步详细描述:
步骤一:从输入数据流读入一个字节,判断该字节后4比特是否为15,若是进入步骤二,否则,后四比特表示的大小即为新四字符长度,进入步骤五;
步骤二:新四字符长度加14;
步骤三:判断下一个字节是否为0,若是新四字符长度加上255,直到所读字节为非0,然后进入步骤四;
步骤四:新四字符长度加上剩余的新四字符长度,进入步骤五;
步骤五:根据新四字符长度,写入新四字符,进入步骤六;
步骤六:判断读入的第一个字节前四比特是否为15,若是进入步骤七,否则,后4比特表示的大小即为重复四字符长度,进入步骤十;
步骤七:重复四字符个数加14;
步骤八:判断下一个字节是否为0,若是重复四字符长度加上255,直到所读字节为非0,进入步骤九;
步骤九:重复四字符长度加上剩余的重复四字符长度,进入步骤十;
步骤十:计算指回距离,根据重复四字符长度,写入重复四字符,进入步骤十一;
步骤十一:判断是否编码到结尾,若是,输出编码长度;否则进入步骤一。
步骤十二:输出若为页面大小,则表示正常解码,若不是,则输出错误。
下面结合下表对本发明的效果做进一步说明:
本实验采用C语言来编写发明所提出的压缩方法,通过比较本发明与传统LZO字典方法对内存数据页的压缩效果,来说明本发明方法压缩速度快的优点。LZO是目前最好的无损压缩方法。本实验所采用的内存数据为典型移动设备的4K大小的内存数据页,在VS2010程序开发环境测试结果:
表1
测试使用数据为内存页面压缩包,压缩包大小为256M。表中的时间是整个压缩包所有内存页面的压缩时间与解压缩时间,表格中数据是运行了100次取平均的结果,由上表可以看出压缩时间与解压缩时间都提高了60%,完成了项目指标,压缩率损失为5.12%,具体数值为使用LZO算法可以压缩到96M左右,而使用本发明可以压缩到109M左右。因此对内存数据的快速存取而言,以10M的压缩空间来换取一倍的压缩时间和解压缩时间是值得的。
Claims (3)
1.一种基于字典的内存页面压缩方法,设计一种新的哈希函数和内存页面的压缩格式,以四字节为基本单元对内存页面编码进行压缩编码和解压缩,具体步骤如下:
(1)读取移动设备中的内存数据与内存数据的长度;
(2)判断所读数据是否为新数据,若所读数据没有记录在字典中,则判为新数据,并把新数据记入字典中,继续读取内存数据,直到未出现新数据为止;
(3)若所读数据已记录在字典中,则对所读数据用新的压缩格式进行压缩编码和解压缩;
(4)判断编码位置是否为内存数据结尾,若是则输出压缩后的数据和数据的长度,并记录结束标志,否则返回步骤(2),继续读入新数据;
所述步骤(2)中的字典是根据关键值直接访问的哈希表,关键值是通过哈希函数计算得出,哈希函数的设计为:从输入数据流中读入四个字节,用前两个字节做异或操作得到新字节A,用后两个字节做异或操作得到新字节B,用新字节A的低位2比特与B的高位2比特做异或操作得到14比特的关键值;
所述步骤(3)中的新压缩格式以四字节为基本单元对内存页面压缩编码和解压缩,其格式为:
1)首字节前4个比特记录重复四字符的长度,后4个比特记录新四字符的长度;
2)从第二个字节开始记录剩余的新四字符长度,然后记录新四字符;
3)在步骤2)新四字符记录完成之后,再记录内存页面剩余的重复四字符的长度和指回距离,所述指回距离是当前的重复四字符的位置与哈希表里记录的上一次四字符位置之间的距离。
2.根据权利要求1所述的基于字典的内存页面压缩方法,其特征在于:内存页面的压缩编码过程描述如下:
2.1)先用首字节后4比特记录新四字符的长度,如果新四字符长度大于14,则首字节后4比特用15作为标记,从第二个字节开始记录剩余的新四字符长度,如果剩余的新四字符长度大于255,则记录一个字节0并将长度减255,直到剩余新四字符长度小于255,记录此剩余新四字符长度;
2.2)在步骤2.1)新四字符长度记录完成之后,记录新四字符;
2.3)用首字节前4比特记录重复四字符的长度,如果重复四字符长度大于14,则用首字节前4比特用15作为标记,然后记录剩余的重复四字符长度;如果剩余的重复四字符长度大于255,则记录一个字节0并长度减255,直到剩余重复四字符长度小于255,记录此剩余重复四字符长度;
2.4)在步骤2.3)完成之后,记录重复四字符的指回距离。
3.根据权利要求1所述的基于字典的内存页面压缩方法,其特征在于:内存页面的解压缩过程描述如下:
3.1)读取压缩格式的首字节,判断首字节后4比特的大小,若小于15则为新四字符的长度,输出新四字符;若等于15,新四字符长度加14,从第二个字节开始,若为字节0则新四字符长度加255,直到所读字节为非0,将新四字符长度加上此非0字节,输出新四字符;
3.2)判断步骤3.1)中首字节前4比特的大小,若小于15则为重复四字符的长度;若等于15,重复四字符长度加14,继续读取,若字节为0,则重复四字符长度加255,直到所读字节为非0,将重复四字符长度加上此非0字节;
3.3)读取压缩格式的最后一个字节,即为重复四字符的指回距离,根据重复四字符的长度,输出重复四字符。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310643898.XA CN103618554B (zh) | 2013-12-01 | 2013-12-01 | 基于字典的内存页面压缩方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310643898.XA CN103618554B (zh) | 2013-12-01 | 2013-12-01 | 基于字典的内存页面压缩方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103618554A CN103618554A (zh) | 2014-03-05 |
CN103618554B true CN103618554B (zh) | 2016-07-06 |
Family
ID=50169258
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201310643898.XA Expired - Fee Related CN103618554B (zh) | 2013-12-01 | 2013-12-01 | 基于字典的内存页面压缩方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103618554B (zh) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104410424B (zh) * | 2014-11-26 | 2017-06-16 | 西安电子科技大学 | 嵌入式设备内存数据的快速无损压缩方法 |
CN104378119B (zh) * | 2014-12-09 | 2017-06-13 | 西安电子科技大学 | 嵌入式设备文件系统数据的快速无损压缩方法 |
CN106533450B (zh) * | 2016-11-14 | 2019-05-24 | 国网北京市电力公司 | Pms编码压缩方法和装置 |
CN108011952B (zh) * | 2017-12-01 | 2021-06-18 | 北京奇艺世纪科技有限公司 | 一种获取压缩字典的方法和装置 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5627995A (en) * | 1990-12-14 | 1997-05-06 | Alfred P. Gnadinger | Data compression and decompression using memory spaces of more than one size |
CN103258030A (zh) * | 2013-05-09 | 2013-08-21 | 西安电子科技大学 | 基于字典与游长编码的移动设备内存压缩方法 |
-
2013
- 2013-12-01 CN CN201310643898.XA patent/CN103618554B/zh not_active Expired - Fee Related
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5627995A (en) * | 1990-12-14 | 1997-05-06 | Alfred P. Gnadinger | Data compression and decompression using memory spaces of more than one size |
CN103258030A (zh) * | 2013-05-09 | 2013-08-21 | 西安电子科技大学 | 基于字典与游长编码的移动设备内存压缩方法 |
Non-Patent Citations (2)
Title |
---|
An Improvement in Lossless Data Compression Via Substring Enumeration;Iwata K,Arimura M,Shima Y;《Computer and Information Science,2011,IEEE/ACIS 10th International Conference》;20110518;219-223 * |
Self-indexing based on LZ77;Kreft S,Navarro G;《Combinatorial Pattern Matching 22nd Annual Symposium CPM 2011 Palermo,Italy,Proceedings》;20110629;41-54 * |
Also Published As
Publication number | Publication date |
---|---|
CN103618554A (zh) | 2014-03-05 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103236847B (zh) | 基于多层哈希结构与游程编码的数据无损压缩方法 | |
US9077368B2 (en) | Efficient techniques for aligned fixed-length compression | |
CN103258030A (zh) | 基于字典与游长编码的移动设备内存压缩方法 | |
US8988257B2 (en) | Data compression utilizing variable and limited length codes | |
WO2019153700A1 (zh) | 编解码方法、装置及编解码设备 | |
CN112953550B (zh) | 数据压缩的方法、电子设备及存储介质 | |
CN100517979C (zh) | 一种数据压缩及解压缩方法 | |
CN104410424B (zh) | 嵌入式设备内存数据的快速无损压缩方法 | |
CN108880556A (zh) | 基于lz77的无损数据压缩方法、误码修复方法及编码器和解码器 | |
CN103618554B (zh) | 基于字典的内存页面压缩方法 | |
US5874908A (en) | Method and apparatus for encoding Lempel-Ziv 1 variants | |
US9479194B2 (en) | Data compression apparatus and data decompression apparatus | |
CN101667843B (zh) | 嵌入式系统的数据压缩、及解压缩方法与装置 | |
US20200294629A1 (en) | Gene sequencing data compression method and decompression method, system and computer-readable medium | |
CN101751451B (zh) | 一种中文数据压缩及解压缩方法及相关设备 | |
US10230392B2 (en) | Techniques for parallel data decompression | |
CN104125475B (zh) | 一种多维量子数据压缩、解压缩方法及装置 | |
CN104378119B (zh) | 嵌入式设备文件系统数据的快速无损压缩方法 | |
CN101534124A (zh) | 一种用于短小自然语言的压缩算法 | |
CN113312325B (zh) | 轨迹数据传输方法、装置、设备及存储介质 | |
CN103078646A (zh) | 字典查询压缩、解压缩方法及其装置 | |
CN103731154A (zh) | 一种基于语义分析的数据压缩算法 | |
CN104682966A (zh) | 列表数据的无损压缩方法 | |
US9998142B1 (en) | Techniques for invariant-reference compression | |
Konecki et al. | Efficiency of lossless data compression |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20160706 Termination date: 20211201 |