压缩与解压(2)

发表时间:2017-05-09 13:25:16 浏览量( 21 ) 留言数( 0 )

学习目标:

1、了解Java的历史

2、为什么要学习Java语言

3、端正学习态度


学习过程:

一、GZIP压缩

GZIP常常用在linxu环境下,是一种非常简单的压缩算法。在Java实现API中,它仅仅包含两个实现类:GZIPInputStream和GZIPOutputStream。 GZIPOutputStream类用于压缩,GZIPInputStream类用于解压缩。

1、压缩,封装方法如下:

  public static void compress(InputStream is, OutputStream os)
			throws Exception {

		GZIPOutputStream gos = new GZIPOutputStream(os);

		int count;
		byte data[] = new byte[8];
		while ((count = is.read(data, 0, 8)) != -1) {
			gos.write(data, 0, count);
		}

		gos.finish();

		gos.flush();
		gos.close();
	}

记得完成操作后,调用finish方法和flush方法,在main方法中调用如下:

 public static void main(String[] args) {		
    try {
	FileInputStream inputStream=new FileInputStream("d://ccc.txt");
	FileOutputStream outputStream=new FileOutputStream("d://abc.gzip");
			
	compress(inputStream,outputStream);
    } catch (FileNotFoundException e) {
	e.printStackTrace();
     } catch (Exception e) {
	e.printStackTrace();
     }
		
}

2、解压缩,封装方法如下:

public static void decompress(InputStream is, OutputStream os)
			throws Exception {

		GZIPInputStream gis = new GZIPInputStream(is);

		int count;
		byte data[] = new byte[8];
		while ((count = gis.read(data, 0, 8)) != -1) {
			os.write(data, 0, count);
		}

		gis.close();
	}

在main方法调用如下,把刚才压缩的文件解压缩。

public static void main(String[] args) {
	try {
		FileInputStream inputStream=new FileInputStream("d://abc.gzip");
		FileOutputStream outputStream=new FileOutputStream("d://ccc.txt");
		decompress(inputStream,outputStream);
	} catch (FileNotFoundException e) {
		e.printStackTrace();
	} catch (Exception e) {
		e.printStackTrace();
	}
		
}

使用java原生提供这些类实现压缩,可能会有中文乱码等等的问题,大家还可以使用第三方的包实现压缩和解压缩,比如apache的实现就比较好了,这里就暂不做介绍了,大家可自行上网查询相关资料。