APP下载

基于无损压缩技术的文件压缩与解压系统

2020-11-16郝雪燕

数码世界 2020年10期
关键词:字符编码算法

郝雪燕

摘要:信息时代带来了“信息爆炸”,海量数据的产生给系统运行带来极大的压力,仅仅依靠计算机的硬件设备渐渐有些难以容下海量数据文件,压缩文件可以在一定程度上节约空间,以便使用者在有限的空间存储更多的文件。数据组织方式不同,数据量不同,但是信息量基本相同,为了节省数据存储空间或者提升信息的传递效率,把数据结构理论与算法应用到数据压缩中,已经变得越来越重要。本文设计了一个基于无损压缩技术的文件压缩与解压系统,经过测试,成功压缩和还原了源文件,实现了预期目标。

关键字:无损压缩;文件压缩;解压

引言

数据是信息的载体,数据压缩是信息量基本不变的情况下,降低数据量的核心技术。所谓数据压缩技术,顾名思义就是压缩数据存储占据的空间,以实现便于传输、处理以及节省储存空间的目的。如果丢失个别的数据不会造成太大的影响,这时忽略它们是个好主意,这就是有损压缩。有损压缩广泛应用于动画、声音和图像文件中,典型的代表就是影碟文件格式MPEG、音乐文件格式MP3和图像文件格式JPG。而无损压缩是相对于有损压缩来讲的,无损压缩方式的特点在于可以最大限度地保持数据的完整性。

数据压缩技术主要通过以下两种方式来实现:一种是压缩数据空间;另一种是依靠算法实现原始数据的重整以精简空间。数据压缩技术本质上是一种编码技术,换言之,是利用不同的数据组织方式表达相同的含义、携载基本相同的信息量。从源文件到编码文件的映射过程就是数据编码,类似于文本、图像、声音等等形式的源文件在计算机中都是以二进制的形式存储的,不同之处在于不同形式的源文件具体的二进制表示方法不同。

1 数据压缩算法

无损数据压缩适用于文本文件、数据库、程序等数据压缩, 其特点是数据经过压缩和解压后,可以完全与压缩前的数据一样。无损数据压缩算法按照压缩模型主要分为两类:基于统计压缩算法和基于字典压缩算法。基于统计压缩算法主要包括:游程长度编码、哈夫曼编码、算术编码;基于字典的压缩算法主要包括:LZ77算法、LZ78算法、LZW算法和LZSS算法。就当前的技术而言,使用无损压缩最大可以将数据文件的大小减少1/2-3/4。目前使用最为广泛的压缩技术是LZW和哈夫曼这两大类压缩算法,本文采用的是哈夫曼编码技术。

哈夫曼编码是最为传统和典型的无损压缩技术。算法的原理为:用二进制的方式来表示每一个符号,数据的长度表示为某些特殊符号出现的频率次数。对于经常使用的符号,选择的二进制就短一些,而一些使用频率较低的符号则可以适当地加长。哈夫曼算法可以确保字符的二进制编码情况已经将数据空间压缩到极致,任何修改都难以对其空间进行进一步压缩。但是该算法并没有将符号之间的排列顺序、重复出现等情况作为处理的重点。根据ASCII码的规定,一个字符由8个比特表示,但是如果提前知道了文件中各个字符出现的频率,就可以对这些字符重新编码。

哈夫曼编码的使用过程主要如下:第一步就是对整个原始文件进行扫描,统计每个字符的频率,然后根据频率建立哈夫曼树,由哈夫曼树构造得到每个字符的编码。由于频率高的字符在哈夫曼树中离根更近,它们的哈夫曼编码长度更短;相反,频率低的字符的编码更长。最后,用哈夫曼编码替换原文件中的字符。

2 数据解压算法

解压是压缩的逆过程,不同的压缩算法对应特定的解压算法,也就是说,数据是怎么压缩的,那么就怎么解压。因此,进行数据压缩时就要提前考虑解压的实现。比如,进行哈夫曼编码压缩数据时要使用一个哈夫曼树将数据转换为对应编码,那么压缩时就要存储这颗编码树,解压时根据存储的信息重新构建出这颗编码树,将编码转换为对应的数据。在进行解压时第一步就是从相应的文件中获得数据压缩时的一些重要信息,通过这些信息重现压缩过程,然后推导出解压步骤,完成数据的复原过程。

3 文件压缩与解压系统的设计

在研究过一些压缩和解压算法后,使用Java编程语言设计并实现了一个文件压缩与解压系统。本系统主要包括七个主要功能:

(1)前台界面:给予用户可视化界面,方便管理。

(2)解压缩控制:控制文件的压缩和解压,如:一键解压,一键压缩等。

(3)文件控制:添加文件到某个压缩包或在某个压缩包内删除某个文件。

(4)语言控制:用于各国语言和中文的转换。

(5)搜索:在压缩包里方便找到某个文件或文件夹。

(6)创建自解压文件:有的时候,本项目更需要的是创建自解压文件,这样就可以随时随地地调用它,而不需要压缩软件的支持。创建自解压文件的方法也很简单,在设置压缩文件属性的图2窗口的"General"页面中,勾选"Create SFX archive"(创建自解压文件),你会发现刚才的*.rar变成了*.exe。

(7)生成分卷自解压文件 :在进行数据备份或大文件交换时,通常采取用压缩软件分卷压缩到软盘上的办法,而在复原的时候则需要用到该压缩软件,否则这些压缩文件便无法复原。 首先在主界面中选定欲压缩的文件夹或文件,单击鼠标右键,从快捷菜单中选"Add to Archive"命令,出现小窗口,先将压缩文档名称填入,需要带路径(如A:\文件名)。然后从容量(Volume size)下拉菜单中选择与软盘对应的数值。有360KB、720KB、1.2MB、1.44MB、2.88MB和自动检测六个备选项,也可以输入自己设定的数值。在文档选项区内选中"自解压"(SFX archive)方式,最后单击,则开始进行分卷压缩,生成的第一个文件扩展名为.exe,第二个文档扩展名为.r00,第三个为.r01,依此类推。复原时,先插入第一张软盘,执行?.exe文件,随后会提示依次插入其他软盘,则顺利地完成解压缩。

4 测试

现在压缩技术发展较好,也因此产生了很多性能非常好的压缩软件,如WinRAR、7 2、快压、360压缩和好压等。这些压缩软件在压缩率、压缩时间和支持的文件格式等方面都有着不错的表现。通过使用本文设计的基于无损压缩技术的压缩与解压系统将一个由doc、xls、txt、pdf文件组成的大小为6.3MB的文件夹进行压缩和解压,分析程序可用性和实用性。经过测试发现,成功压缩和还原了源文件,实现了预期目标。

5 结束语

本文对数据压缩与解压过程进行了简单的论述,通过了解一些常用的压缩算法,可以帮助理解数据压缩与解压的实现原理。目前数据压缩算法多种多样,在这些基础算法上进行一些改进又可以产生很多不同的算法,例如可以改进压缩链码提高压缩效率。常用的压 缩软件也是基于这些压缩算法实现的,可以结合使用,算法的选择会对系统最终的压缩效果产生直接的影响。

参考文献

[1]汪帅,吕江花,汪溁鹤等.一种支持数据去冗和扩容的多媒体文件云存储系统实现[J].计算机研究与发展,2018,55(5):1034-1048.

[2]刘娜.浅谈计算机中的字符编码[J].科技創新与应用,2017(1):107-107.

[3]吴家安.数据压缩技术及应用[M].北京:科学出版社,2008.

[8]苑思明,郑晗,李俊杰.基于哈夫曼树压缩的加密技术[J].信息记录材料,2018(6).

猜你喜欢

字符编码算法
住院病案首页ICD编码质量在DRG付费中的应用
Python实现图片转字符画
正则表达式快速入门
图片轻松变身ASCⅡ艺术画
Travellng thg World Full—time for Rree
高效视频编码帧内快速深度决策算法
学习算法的“三种境界”
算法框图的补全
算法初步知识盘点
视频监视系统中字符叠加技术的应用