文件压缩与解压缩的实现程序(Jbuilder)
摘 要
随着人们对数据的大量需求以及计算机使用时间的增加,计算机磁盘上的文件越来越大,越来越多。如何让有限的磁盘空间容纳更多的数据成为需要解决的问题。一方面,高速发展的存储技术以提高磁盘容量来解决这样的需求,但随着网络环境下数据传递的产生以及带宽的限制,大容量数据问题日益突出。在这两种需求的推动下,对数据压缩的需求产生了。人们可以将文件在不改变其本身的条件下,将其以更小的占用空间存储,并且在需要的时候将文件恢复成原有的样子,这就是压缩目的。本论文主要研究文件的无损压缩技术,并简要介绍了文件压缩的分类、几种常用的无损压缩格式和常用的压缩算法。运用LZ77字典算法、懒惰匹配算法和Huffman编码算法,使用JAVA语言在Jbuilder2006环境下设计了使用GZIP算法对文件压缩与解压缩的实现程序。用户可以根据自己的需求,使用此程序方便地对文件进行压缩或者解压缩操作。 [资料来源:http://doc163.com]
关键词:压缩;解压缩;GZIP;JAVA
Practice of File Compression and Decompression
Abstract
As the great demand for data and the using time of computer are increasing, computer files on the disk grow more and more. How to make the limited disk space to store more data has became a problem crying out for solutions. On one hand, the rapid development of storage technology that can increase the disk capacity, can meet such demand. However, with the emergence of data transmission in a network environment and the bandwidth limitations, the problem of large-capacity data is increasingly prominent. With the promotion of both demands, the need for data compression and decompression is generated. People can store a file with a smaller storage space without changing the file’s own condition, and can restore the file; that is the purpose of data compression and decompression. This treatise principally research file lossless compression, otherwise, briefly introduced classification of file compression, some general lossless compression format and general compression algorithm. A procedure within algorithm called GZIP were designed for file compression and decompression in JAVA language under the circumstances of Jbuilder2006,which used LZ77 dictionary algorithm, lazy match algorithm and Huffman coding algorithm. Users could use this procedure compress or decompress files expediently according to their demand.
[资料来源:http://Doc163.com]
Key words: Compression; Decompression; GZIP; JAVA
需求分析
文件的压缩与解压缩,要能方便地进行,要完成的功能包括压缩功能,解压缩功能,选择文件路径,选择操作方案,选择新文件保存路径。此程序还要在压缩成功后显示被压缩文件的大小,并对非法操作给出提示。
用户可以选择文件进行压缩或解压缩操作,并选择生成保存路径,默认的保存路径为原文件目录,压缩的生成文件以原文件加.gzip后缀命名,在解压缩操作中,若输入文件不是gzip格式的压缩文件,则提示gzip文件格式不对。
程序的基本设计原则有:方便性原则、功能实用性原则和开放性原则等。程序设计时采用较好的压缩技术,能保证文件压缩的压缩比和可恢复性,确保程序有较长的生命周期。
本程序的总体目标是实现文件压缩与解压缩的便捷操作,因此需要有便捷的操作界面。
LZ77算法简介
这一算法是由Jacob Ziv和Abraham Lempel于 1977 年提出,所以命名为LZ77。这种算法模型也被称为“滑动字典”模型或“滑动窗口”模型。
开发环境
使用JBuilder2006进行程序开发。JBuilder是一个可视化JAVA开发工具。它是在Java2平台上开发商业应用程序、数据库、发布程序的优秀工具。它支持J2EE,所以程序员可以快速的转换企业版JAVA应用程序。使用此开发工具可以实现程序的可视化。
[资料来源:https://www.doc163.com]
总体设计
系统总体结构设计是系统设计过程中及其重要的一步,对系统的技术层次,开发过程,功能实现及开发成本方面具有重大的影响。系统总统结构设计应尽可能的考虑人机关系,环境条件以及算法的可行性等的联系,使系统每个部分都能协调适应。
本实验论证是基于GZIP算法理论体系的,因此使用的压缩方法是参照GZIP算法的。GZIP算法理论体系主要包含三个内容:LZ77算法,Huffman算法,懒惰匹配算法。因此在设计过程中要注意如何实现这三个算法并且将其结合起来。
程序功能模块
根据设计思路,文件的压缩和解压缩是两个相反的操作,程序可分为GZIP压缩模块、UNGZIP压缩模块。
目 录
1 引言 1
1.1 课题背景 1
1.2 国内外现有的研究成果 1
2 压缩与解压缩程序分析 2
2.1 需求分析 2
2.2 使用的算法理论 2
2.2.1 LZ77算法简介 2
2.2.2 Huffman算法简介 3
2.2.3 GZIP算法原理分析 4
2.3 开发环境 4
3 总体设计 4
3.1 程序功能模块 5
3.2 模块分析与流程图 5
3.2.1 压缩模块 5
3.2.2 解压缩模块 6
3.3 程序中各个类的初步定义 7
4 详细设计和实现 8
4.1 压缩的程序流程 8
(毕业设计)
4.2 解压缩的程序流程 9
4.3 主函数代码 10
4.3.1 gzip压缩模块代码 10
4.3.2 ungzip解压缩模块代码 11
4.4 程序界面设计 12
5 软件系统测试 17
5.1 运行环境 17
5.2 测试方法 17
5.3 测试结果 17
5.3.1 使用程序对txt文件压缩 17
5.3.2 使用程序对bmp图象文件压缩 18
5.3.3 使用程序对doc文件压缩 18
结 论 18
参考文献 19
致 谢 20 [资料来源:http://www.doc163.com]
声 明 21
[资料来源:www.doc163.com]
结 论
本程序功能不很复杂,程序的设计和实现是笔者在辅导老师的指导下完成的。笔者在了解和熟悉了GZIP算法的基础上,运用JAVA这一编程语言在Jbuilder环境下,完成了本程序。程序可以对.bmp、.txt、.doc等文件进行比较高效的压缩。通过该毕业设计的编程工作,使我对数据压缩的原理有了一定的认识,同时我也对JAVA编程设计有了一定的了解。通过这个项目设计,可以看到算法的重要性。在本项目中,字符编码的算法有多种,如果选择不当,文件的压缩比会非常低,这就无法起到文件压缩的作用,编写的程序也就没有应用价值,因此选择一个好的算法是项目设计成功的必要条件,对此应予以高度的重视。本程序的安全性、压缩率与易操作性都比不过WINRAR。在以后的日子里,随着我技术的提高和思想的成熟,我定会进一步修改和完善,提高它的安全性、压缩率与易操作性。
参考文献
[1] Mark[美],Nelson[美].数据压缩技术原理与范例[M].北京:科学出版社,1995。
[2] JIURL.Gzip源码详解[OL].CSDN网站. http://www.papersay.com
[3] 郑阿奇.JAVA实用教程[M].北京:电子工业出版社,2005。
[4] 沈耀,郝萍,李扬.JBuilder基础开发篇[M].北京:清华大学出版社,2005。
[5] 娄不夜,王利.面向对象的程序设计与JAVA[M].北京:清华大学出版社,2004。
[6] 吴乐南.数据压缩的原理与应用[M].北京:电子工业出版社,1995。
[7] 袁玫,袁文.数据压缩技术及其应用[M].北京:电子工业出版社,1995。
[8] 戴善荣.数据压缩[M].西安:西安电子科技大学出版社,2005。
[资料来源:Doc163.com]