压缩程序的实现过程中,涉及到很多类的调用,除了压缩有关的类,还有IO类。对于IO类的调用不考虑的情况下,各个压缩功能类的调用流程(如图7):

(1)主程序gzip调用输出过滤流GZIPOutputStream,读取GZIP格式压缩数据,压缩开始。

(2)GZIPOutputStream调用CRC32来计算Checksum的数目。

(3)在CRC32返回结果后,GZIPOutputStream调用Deflater压缩类来进行压缩。在Deflater类的调用过程中,实现了对数据的压缩字符集确定与编码,也就是实现了LZ77算法、懒惰匹配与Huffman编码的结合。

(4)建立压缩文件,调用DeflaterOutputStream来压缩Deflater格式数据。

这些过程的操作是不能离开IO类的,所以实现这些过程的前提是要有数据流输入,也就是调用FileInputStream,打开需压缩文件作为文件输入流;在以上的流程完毕之后,调用FileOutputStream类建立压缩文件输出流,最终形成压缩后的文件。

4.1解压缩的程序流程

在解压缩的实现过程中,各个类的调用关系(如图8):

(1)主程序ungzip调用GZIPInputStream,读取GZIP格式压缩数据,解压缩开始。

(2)GZIPInputStream调用CRC32来计算Checksum的数目。

(3)在CRC32返回结果后,调用CheckedInputStream保存被读取数据的Checksum,同时调用Inflater进行解压缩。

(4)在Inflater解压缩过程中,如果数据格式错误,则调用DataFormatException;如果没有数据格式错误,则调用InflaterInputStream来解压Inflater格式的压缩数据。

4.1主函数代码

4.3.1gzip压缩模块代码

压缩模块要完成的就是将文件读入以后进行压缩,再将压缩后的数据写入一个新的文件,其部分代码如下:

publicclass gzip

{

publicstatic void main(String[] args)

{

if(args.length !=2)

{

System.out.println("Usage:javagzip ");

System.exit(1);

}

try

{

//打开需压缩文件作为文件输入流

FileInputStreamfin=new FileInputStream(args[0]);

//建立压缩文件输出流

FileOutputStreamfout=new FileOutputStream(args[1]);

//建立gzip压缩输出流

GZIPOutputStreamgzout=new GZIPOutputStream(fout);

byte[]buf=new byte[1024];//设定读入缓冲区尺寸

intnum;

while((num=fin.read(buf)) != -1)

{

gzout.write(buf,0,num);

}

gzout.close();//关闭流,必须关闭所有输入输出流.保证输入输出完整和释放系统资源.

fout.close();

fin.close();

}catch(IOExceptione)

{

System.out.println(e);

}

}

}

4.3.2ungzip解压缩模块代码

解压缩模块要完成的就是将文件读入以后进行解压缩,再将解压缩后的数据写入一个新的文件,其部分代码如下:

publicclass ungzip

{

publicstatic void main(String[] args)

{

if(args.length !=2)

{

System.out.println("Usage:javaungzip ");

System.exit(1);

}

try

{

//建立gzip压缩文件输入流

FileInputStreamfin=new FileInputStream(args[0]);

//建立gzip解压工作流

GZIPInputStreamgzin=new GZIPInputStream(fin);

//建立解压文件输出流

FileOutputStreamfout=new FileOutputStream(args[1]);

byte[]buf=new byte[1024];

intnum;

while((num=gzin.read(buf,0,buf.length)) != -1)

{

fout.write(buf,0,num);

}

gzin.close();

fout.close();

fin.close();

}catch(IOExceptione)

{

System.out.println(e);

}

}

}

4.2程序界面设计

为了让用户能便捷地进行压缩与解压缩的操作,还要对程序加入一个可视化界面。其外观如图9:

java压缩源代码_【免费毕设】JAVA文件压缩与解压缩实践(源代码+论文)相关推荐

  1. java压缩文件能否不压缩路径_如何在Java中压缩文件而不包含文件路径

    例如,我要压缩存储在/Users/me/Desktop/image.jpg中的文件 我做了这个方法: public static Boolean generateZipFile(ArrayList s ...

  2. 【毕业设计】JAVA文件压缩与解压缩实践(源代码+论文)

    文章目录 目录 一.系统设计 二.系统实现 源文件 目录 一.系统设计 系统总体结构设计是系统设计过程中及其重要的一步,对系统的技术层次,开发过程,功能实现及开发成本方面具有重大的影响.系统总统结构设 ...

  3. java文件压缩与解压_Java实现文件压缩与解压

    Java实现ZIP的解压与压缩功能基本都是使用了Java的多肽和递归技术,可以对单个文件和任意级联文件夹进行压缩和解压,对于一些初学者来说是个很不错的实例.(转载自http://www.puiedu. ...

  4. 教学管理系统java源代码_教学管理系统java源代码.doc

    教学管理系统java源代码 教学管理系统java源代码 篇一:java学生管理系统源代码 import java.io.Serializable; public class Course implem ...

  5. 关于java的毕业设计_我的java毕业设计之路回顾

    我的java毕业设计之路回顾 大宇大学毕业现已四个月了,这四个月有懒散的时分,有尽力的时分.回忆自己走过的路,只要java毕业设计最能浓缩我的所学.我早就有这个计划:把自己的毕业设计与咱们共享,但一向 ...

  6. 重庆找Java开发工作_重庆【Java开发程序员】

    重庆[Java开发程序员],提倡一切为了学员就业的办学思想,教学过程中坚持以练习企业项目为主,让学员真正能学到技术,毕业就能适应工作岗位. 重庆[Java开发程序员], Java 编程开发.而且很多软 ...

  7. java添加容器_如何为Java应用程序构建docker容器

    我想要做的是为我的Java应用程序构建一个docker镜像,但对于大多数编译语言,以下注意事项应该是正确的. 问题 在我的构建服务器上,我想为我的应用程序生成一个docker镜像作为可交付成果.为此, ...

  8. java 正则表达式 开头_如何在Java中修复表达式的非法开头

    java 正则表达式 开头 您是否遇到过这个令人难以置信的错误,想知道如何解决它? 让我们仔细阅读一下,研究如何解决表达式Java非法开头错误. 这是一个动态错误,这意味着编译器会发现某些不符合Jav ...

  9. java编程学习方法_在线学习Java编程的最佳方法

    java编程学习方法 1.简介 Java是使用最广泛的编程语言之一. 根据Github的最新报告 ,Java被列为仅次于JavaScript的第二大最常用的编程语言. 掌握Java的人有很多话题. 好 ...

  10. java sca视频教程_如何进入Java SCA软件的开发

    该文档是SCA Java项目的开发者指南 l一般性指南 l获取源代码 l配置你的开发环境 l构建二进制和源代码发布包 l导入SCA模块到你的开发IDE环境中 l理解SCA代码路径 l编码指南 l测试 ...

最新文章

  1. assume用法及意思_英语单词Think, Suppose, Assume, Presume的区别
  2. python对大量数据去重_Python对多属性的重复数据去重实例
  3. Javascript高级程序设计第二版第十四章--异常--笔记
  4. 2019创客中国智能融合应用中小企业创新创业大赛启动
  5. Flink java.lang.NoClassDefFoundError: org/apache/flink/api/common/functions/FlatMapFunction
  6. c语言程序女设计教学效果分析,C语言程序设计的教学论文
  7. linux apache配置_linux查看nginx、apache、php、php-fpm、mysql及配置项所在目录
  8. 判断一个变量是否是Array类型
  9. 对是否要用Linux的思考
  10. 华为m6升级鸿蒙,华为鸿蒙系统再传喜讯!14款华为旧旗舰喜提新系统:大幅度换血...
  11. Mysql中Drop,Truncate,Delete的区别
  12. matlab 汽车雷达模拟器,雷达回波模拟器在汽车雷达测试中的应用
  13. solaris与linux区别,Solaris和Linux的区别
  14. dbv mysql_mysql数据库版本控制dbv使用
  15. ios怎么把电话号码存到android,如何将苹果手机的通讯录导入到安卓手机中?看这里...
  16. JavaScript DOM 学习笔记
  17. Allegro建立非标准热风焊盘之 理解X IX IY 命令
  18. lumen php命令,lumen控制器调用artisan
  19. 路由器配置和静态路由
  20. php将阿拉伯数字转换成中文大写,PHP将阿拉伯数字转换成汉字大写支持小数点

热门文章

  1. CentOS7.5 Linux搭建全文检索--Solr7.4.0单机服务
  2. JAVA程序错误总结
  3. 政府门户应该怎样建设?——解读中国政府网站绩效评估标准
  4. linux内核学习笔记【一】临时内核页表 Provisional kernel Page Tables
  5. 何修改基于ArcGIS Server .NET ADF确良9.3的WEB SERVER端口使ArcGIS Server Manager来创建WEB应用的注意事项...
  6. 10-4-文章评论管理
  7. supervisor管理mysql靠谱吗_Supervisor 从入门到放弃
  8. 测速源码_解密,相亲交友直播系统源码,高并发如何做到不卡顿
  9. mysql profiling详解_使用mysql profiling功能剖析单条查询
  10. 交换机putty怎么调试_弱电工程视频监控系统设计、安装、调试、维护全过程讲解...