CN103258030B - 基于字典与游长编码的移动设备内存压缩方法 - Google Patents
基于字典与游长编码的移动设备内存压缩方法 Download PDFInfo
- Publication number
- CN103258030B CN103258030B CN201310169650.4A CN201310169650A CN103258030B CN 103258030 B CN103258030 B CN 103258030B CN 201310169650 A CN201310169650 A CN 201310169650A CN 103258030 B CN103258030 B CN 103258030B
- Authority
- CN
- China
- Prior art keywords
- data
- length
- internal storage
- storage data
- mobile device
- 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
本发明公开了一种基于字典与游长编码的移动设备内存压缩方法,主要解决已有的字典编码与游长编码压缩方法对内存数据压缩率低的问题,其实现步骤是:(1)读入内存数据和内存数据长度;(2)判断内存数据是否为可压缩数据,若不是可压缩数据,则直接记录数据长度和数据,若是,则对连续相同字符串采用游长编码压缩格式;(3)对其他普通内存数据则采用字典压缩格式压缩;(4)判断是否压缩到内存数据尾,若是则终止,若不是,则继续读入内存数据。本发明与现有的其他的内存压缩方法相比,压缩率更高,进而能为移动设备内存释放出更多的剩余空间,提高移动设备的运行效率,可用于需要内存压缩的移动设备中。
Description
技术领域
本发明属于数据处理技术领域,涉及设备内存的数据压缩装置,可用在内存受限的嵌入式移动设备中。
背景技术
近年来,随着移动互联网的发展,移动设备越来越成为人们不可或缺的一种日常生活用品,由于移动设备的内存受限,就要求最好能对其内存数据进行压缩,节约内存空间,提高设备的整体性能。现代社会信息量的不断增长,人们对计算机***的性能也提出了更高的要求,如更高的速度、更低的耗能、更小的体积、能存取更多的信息等等。为了达到上面的各种性能要求,人们提出了各种改进的方法。其中,比较廉价的改进方法之一是数据压缩技术。如若在计算机***中运用了数据压缩技术,则在数据传输中占用了更小的带宽;在小的移动设备如手机,MP4等电子设备占用的存储空间更小;也可以降低频繁的物理磁盘或闪存与CPU之间的I/O读取,从而延长了存储设备的寿命和节省能耗。鉴于上述技术的各种优点,运用这种简单而廉价的改进计算机***性能的技术,研究数据压缩技术是很有必要的。
用于移动设备内存数据的压缩算法,要求方法高效,解压缩速度快,适用于内存数据的特点等一系列要求。目前,数据无损压缩方法有很多,而解压缩速度很快,可以达到实时解压缩内存数据的主要有LZO(Lempel-Ziv-Oberhumer)和RLE(run-lengthencoding)两种。
LZO是一种基于字典的数据无损压缩算法,主要通过记录重复字符段的重复位置和重复长度来完成编码。LZO压缩与解压缩速度相当快,而且解压简单,不需要另外开辟内存,可以满足嵌入式设备需要快速解压数据的要求。LZO方法虽然具有解压缩快速等优点,但是它并不完全适用于内存数据的压缩,在压缩长的连续相同字符串时,LZO需要较多的字符去记录数据,因此压缩率不高。
游长编码RLE,又称变动长度编码法,是一种简单的非破坏性资料压缩法,其好处是压缩和解压缩都非常快,特别是对于压缩长的连续相同字符串,相比于LZO,其可以用更少的字符去记录,但在普通数据的压缩上,其效果并不如LZO。
发明内容
本发明目的在于克服已有的字典编码与游长编码压缩方法对内存数据压缩率低的缺点,在基本保证其压缩和解压缩速度的前提下,结合两者各自的优点,提出一种基于字典与游长编码的内存压缩方法,以提高整体的压缩率。
实现本发明的基本思想是:根据要压缩的内存数据特点选择字典压缩格式或游长编码压缩格式,用字典编码方法压缩一般重复字符串,用游长编码压缩长的连续相同字符串,并针对长的连续相同字符串设计游长编码的压缩格式。其具体实现步骤包括如下:
(1)读取移动设备中的内存数据与内存数据的长度;
(2)判断所读数据是否为新数据,若所读数据没有记录在哈希表中,则判为新数据,并把该新数据计入哈希表中,继续读取内存数据,直到未出现新数据为止,执行步骤(3)对所读数据直接进行压缩编码;
(3)根据内存数据形式确定编码方式:
3a)对于长度长于4的重复相同字符串,将其长度先与数值255比较,再进行压缩:
如果该字符串的长度小于255,将第一个字节记录为标志位,将第二个字节直接记录重复的长度;
如果该字符串的长度大于等于255,将第一个字节记录为标志位,将第二个字节记录为0,将第三个字节记录为255的整倍数,将第四个字节记录为除去255的整数倍剩余的字符串的长度;
3b)对于普通的重复字符串,即除了长度长于4的重复相同字符串以外的其他重复字符串,则用字典编码;
(4)判断是否编到内存数据结尾,若是,则输出压缩后数据和压缩后数据的长度,并记下结束标志,否则,返回步骤(2),继续读入新数据。
本发明与现有的其他的内存压缩方法相比,由于其能对重复相同字符串用更少的字节去压缩,所以压缩率比其他方法更高,进而能为移动设备内存释放出更多的剩余空间,提高了移动设备的运行效率。
附图说明
图1是本发明的流程图;
图2是本发明中的新字符记录子流程图;
图3是本发明中的压缩编码子流程图。
具体实施方式
下面结合附图1对本发明作进一步详细描述:
步骤一:读入内存数据长度,按内存数据的长度开辟存储空间,将移动设备的内存数据读入所开辟的存储空间,再为哈希表开辟存储空间。
步骤二:取内存数据的四个字元做哈希运算,按所计算的哈希值从哈希表中取出数据与新字符对比,若相同,则说明数据在哈希表内,不是新字符,执行步骤三,若不相同,则把新字符计入哈希表,执行步骤五;
步骤三:记录新字符。
参照图2,本步骤的具体实现如下:
(3a)计算新字符的长度,如果新字符长度小于3个,由上一个编码格式的倒数第二个字节来记录长度,然后执行步骤(3d)记录新字符,否则,执行步骤(3b);
(3b)若是新字符长度小于17大于3个,记下新字符长度减3,然后执行步骤(3d)记录新字符,否则,执行步骤(3c);
(3c)若是新字符长度大于17,则先记录一个0,再记录新字符长度减去17的差值,如该差值大于255,则在第一个0后再记录一个0,同时把差值再减去255得到新的差值,再把新的差值继续与255比较,直到最后的差值小于255时,记下最后的差值,然后执行步骤(3d)记录新字符;
(3d)记录新字符,并执行步骤四。
步骤四:压缩编码。
参照图3,本压缩编码步骤主要分为两种情况:
第一种情况:对于长度长于4的重复0字符串,将其长度先与数值255比较后,再进行如下压缩:
如果该字符串的长度小于255,将第一个字节记录为标志位,将第二个字节直接记录重复的长度;
如果该字符串的长度大于等于255,将第一个字节记录为标志位,将第二个字节记录为0,将第三个字节记录为255的整倍数,将第四个字节记录为除去255的整数倍剩余的字符串的长度。
第二种情况:对于其他的普通字符串用字典编码,可采用目前通用方法有LZ(LempelZiv)字典编码方法、LZSS(LempelZivStorerSzymanski)字典编码方法和LZO(LempelZivOberhumer)字典编码方法等,本实例采用但不局限于使用LZO方法,其编码格式有如下五种:
由字符串重复长度和指回距离选用LZO编码格式,该指回距离,是指字元当前位置与哈希表内记录位置之间的距离:
对于字符串重复长度小于8,且指回距离小于2K的内存数据,将第一个字节记录为长度,将第二个字元记录为字元当前位置与哈希表内记录位置之间的距离;
对于字符串重复长度小于8,且指回距离小于16K的内存数据,将第一个字节记录为长度,将第二个和第三个字节记录为字元当前位置与哈希表内记录位置之间的距离;
对于字符串重复长度小于8,且指回距离小于48K的内存数据,将第一个字节最后3个比特记录为长度,将第一个字节第4比特、第二个字节和第三个字节记录为字元当前位置与哈希表内记录位置之间的距离;
对于字符串重复长度大于8,且指回距离小于16K的内存数据,将前两个字节记录为重复长度,将后两个字节记录为字元当前位置与哈希表内记录位置之间的距离;
对于字符串重复长度大于8,且指回距离小于48K的内存数据,将前两个字节记录为重复长度,将后两个字节记录为字元当前位置与哈希表内记录位置之间的距离。
步骤五:检查内存数据的下一个字元是否编到数据结尾,如果是,则执行步骤六,否则,返回步骤二。
步骤六:记录结束标志,输出压缩后内存数据和内存数据的长度。
本发明的效果可以通过以下实验进一步说明:
本实验采用C语言来编写发明所提出的压缩方法,通过比较本发明与传统LZO字典方法对内存数据页的压缩效果,来说明本发明方法压缩率高的优点。本实验所采用的内存数据为典型移动设备的4K大小的内存数据页,压缩结果如表1,表1中数据为对内存数据页压缩编码后的数据大小,数值越小,说明压缩率越高。
内存数据 | LZO压缩大小 | 本发明压缩大小 | 提高率 |
0001 | 387 | 369 | 5%3 --> |
0002 | 905 | 864 | 5% |
0003 | 1583 | 1544 | 2% |
0004 | 1102 | 1016 | 8% |
0005 | 1183 | 1141 | 4% |
0006 | 1933 | 1924 | 0% |
0007 | 1007 | 994 | 1% |
0008 | 28 | 12 | 57% |
0009 | 691 | 672 | 3% |
0010 | 936 | 893 | 5% |
0011 | 900 | 858 | 5% |
0012 | 888 | 833 | 6% |
0013 | 809 | 757 | 6% |
0014 | 1772 | 1757 | 1% |
表1
从表1中可知,本发明方法相对于现有的LZO压缩编码方法,在压缩率上均有提高,特别是内存数据页的数值全为0时,压缩率能提高57%之多。由于本发明方法对内存数据的压缩率更高,所以能为移动设备内存释放出更多的剩余空间,提高了移动设备的整体运行效率。
Claims (1)
1.一种基于字典与游长编码的移动设备内存压缩方法,包括以下步骤:
(1)读取移动设备中的内存数据与内存数据的长度;
(2)判断所读数据是否为新数据,若所读数据没有记录在哈希表中,则判为新数据,并把该新数据记入哈希表中,继续读取内存数据,直到未出现新数据为止,执行步骤(3)对所读数据直接进行压缩编码;
(3)根据内存数据形式确定编码方式:
3a)对于长度长于4的重复相同字符串,将其长度先与数值255比较,再进行压缩:
如果该字符串的长度小于255,将第一个字节记录为标志位,将第二个字节直接记录重复的长度;
如果该字符串的长度大于等于255,将第一个字节记录为标志位,将第二个字节记录为0,将第三个字节记录为255的整倍数,将第四个字节记录为除去255的整数倍剩余的字符串的长度;
3b)对于普通的重复字符串,即除了长度长于4的重复相同字符串以外的其他重复字符串,则用字典编码;
(4)判断是否编到内存数据结尾,若是,则输出压缩后数据和压缩后数据的长度,并记下结束标志,否则,返回步骤(2),继续读入新数据。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310169650.4A CN103258030B (zh) | 2013-05-09 | 2013-05-09 | 基于字典与游长编码的移动设备内存压缩方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310169650.4A CN103258030B (zh) | 2013-05-09 | 2013-05-09 | 基于字典与游长编码的移动设备内存压缩方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103258030A CN103258030A (zh) | 2013-08-21 |
CN103258030B true CN103258030B (zh) | 2016-04-13 |
Family
ID=48961947
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201310169650.4A Expired - Fee Related CN103258030B (zh) | 2013-05-09 | 2013-05-09 | 基于字典与游长编码的移动设备内存压缩方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103258030B (zh) |
Families Citing this family (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103618554B (zh) * | 2013-12-01 | 2016-07-06 | 西安电子科技大学 | 基于字典的内存页面压缩方法 |
CN104753539A (zh) * | 2013-12-26 | 2015-07-01 | ***通信集团公司 | 一种数据压缩方法及装置 |
CN103970256B (zh) * | 2014-04-22 | 2017-02-15 | 中国科学院计算技术研究所 | 一种基于内存压缩和cpu动态调频的节能方法及*** |
CN104410424B (zh) * | 2014-11-26 | 2017-06-16 | 西安电子科技大学 | 嵌入式设备内存数据的快速无损压缩方法 |
CN104378119B (zh) * | 2014-12-09 | 2017-06-13 | 西安电子科技大学 | 嵌入式设备文件***数据的快速无损压缩方法 |
CN105629155B (zh) * | 2015-12-28 | 2018-08-17 | 中国科学院声学研究所 | 一种测试数据的字典编码方法 |
CN106685429B (zh) * | 2016-12-29 | 2020-07-10 | 广州华多网络科技有限公司 | 整数压缩方法及装置 |
JP7210130B2 (ja) * | 2017-04-07 | 2023-01-23 | 富士通株式会社 | 符号化プログラム、符号化方法および符号化装置 |
CN107943424A (zh) * | 2017-12-18 | 2018-04-20 | 苏州蜗牛数字科技股份有限公司 | 一种网络游戏中方块地形信息的压缩方法 |
CN108737976B (zh) * | 2018-05-22 | 2021-05-04 | 南京大学 | 一种基于北斗短报文的压缩传输方法 |
CN111342844B (zh) * | 2020-02-28 | 2023-06-27 | 中船鹏力(南京)大气海洋信息***有限公司 | 一种基于lzw编码与改进游程编码的雷达数据无损压缩及解压方法 |
CN115934730B (zh) * | 2023-01-09 | 2023-07-18 | 阿里云计算有限公司 | 数据处理方法和装置、介质和计算机设备 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1786939A (zh) * | 2005-11-10 | 2006-06-14 | 浙江中控技术有限公司 | 实时数据压缩方法 |
CN102112986A (zh) * | 2008-07-31 | 2011-06-29 | 微软公司 | 对基于列的数据编码的结构的高效的大规模处理 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7930435B2 (en) * | 2007-05-09 | 2011-04-19 | Ciena Corporation | Hub and spoke compression |
US20120150877A1 (en) * | 2010-12-09 | 2012-06-14 | Microsoft Corporation | Efficient database compression |
-
2013
- 2013-05-09 CN CN201310169650.4A patent/CN103258030B/zh not_active Expired - Fee Related
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1786939A (zh) * | 2005-11-10 | 2006-06-14 | 浙江中控技术有限公司 | 实时数据压缩方法 |
CN102112986A (zh) * | 2008-07-31 | 2011-06-29 | 微软公司 | 对基于列的数据编码的结构的高效的大规模处理 |
Also Published As
Publication number | Publication date |
---|---|
CN103258030A (zh) | 2013-08-21 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103258030B (zh) | 基于字典与游长编码的移动设备内存压缩方法 | |
CN103236847B (zh) | 基于多层哈希结构与游程编码的数据无损压缩方法 | |
CN104410424B (zh) | 嵌入式设备内存数据的快速无损压缩方法 | |
CN107102220A (zh) | 录波数据处理方法及装置 | |
US9946464B2 (en) | Systems and methods for predicting compressibility of data | |
CN104125458A (zh) | 内存数据无损压缩方法及装置 | |
CN110021369B (zh) | 基因测序数据压缩解压方法、***及计算机可读介质 | |
CN106202213B (zh) | 一种fpga二进制文件压缩、解压方法及压缩、解压装置 | |
CN104348490A (zh) | 一种基于效果优选的组合数据压缩算法 | |
WO2017113124A1 (zh) | 一种服务器以及服务器压缩数据的方法 | |
MX2022006144A (es) | Metodo y aparato para almacenar datos, y dispositivo informatico y medio de almacenamiento del mismo. | |
CN104467868A (zh) | 中文文本压缩方法 | |
CN104156990B (zh) | 一种支持特大型数据窗口的无损压缩编码方法及*** | |
US10303402B2 (en) | Data compression using partial statistics | |
CN103152430A (zh) | 一种缩减数据占用空间的云存储方法 | |
CN102904580B (zh) | X-bit压缩编码算法 | |
CN104378119B (zh) | 嵌入式设备文件***数据的快速无损压缩方法 | |
CN103618554B (zh) | 基于字典的内存页面压缩方法 | |
US10380240B2 (en) | Apparatus and method for data compression extension | |
CN103049388B (zh) | 一种分页存储器件的压缩管理方法及装置 | |
CN104682966A (zh) | 列表数据的无损压缩方法 | |
CN206181271U (zh) | 视频压缩*** | |
CN102708191A (zh) | 一种节省内存的字库编码和解码方法 | |
CN101692349A (zh) | 一种设备及其进行数据存储和启动的方法 | |
CN105049055A (zh) | 一种数据压缩方法和数据解压方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | 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: 20160413 Termination date: 20170509 |