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

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

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

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

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

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

d1b206d830c8a66d67db66aa514ea081.png

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

4.1解压缩的程序流程

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

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

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

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

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

dfbc9e26a38b39bfaa25bdca1e1ccb19.png

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:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值