关于Inflater和Deflater的简单用法

仅用于记录!
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.util.zip.DataFormatException;
import java.util.zip.Deflater;
import java.util.zip.Inflater;

public class InflaterTest {
	/**
	 * 对文件进行压缩和解压
	 * @param args
	 */
	public static void main(String[] args) {
		File xmlFile = new File("D:/xml.xml");
		byte[] resByte = new byte[1024];
		try {
			InputStream is = new FileInputStream(xmlFile);
			try {
				is.read(resByte); //将流中的数据读到字节数组中
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} finally{
				try {
					if(null != is){
						is.close(); //关闭流资源,防止资源泄漏
					}
				} catch (IOException e) {
					System.out.println("close InputStream resources error");
					e.printStackTrace();
				}
			}
			byte[] deByte = decompress(resByte);//将获取到的资源数据进行压缩,返回压缩后的字节数组
			incompress(deByte);//对压缩的数据进行解压操作
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
	/**
	 * 对字节数组进行压缩
	 * @param deByte 待压缩的字节数组
	 * @return resultByte 压缩后的字节数组
	 */
	public static byte[] decompress(byte[] deByte){
		int resLen = deByte.length;
		byte[] resultByte = new byte[resLen]; //压缩后的字节数组
		Deflater def = new Deflater();
		def.setInput(deByte);
		/*
		 * 通知压缩器,以当前缓存区中的数据为压缩数据
		 *(如果不finish(),则会出现invalid stored block lengths(无效的存储块长度)的异常)
		 */
		def.finish();
		int desLen = def.deflate(resultByte);
		def.end(); //关闭压缩器,释放所有未处理的输入
		System.out.println("压缩文件内容:\n" + new String(deByte).trim());
		System.out.println("压缩前文件大小:" + resLen);
		System.out.println("压缩后文件大小:" + desLen);
		return resultByte;
	}
	
	/**
	 * 对压缩后的字节数组进行解压
	 * @param inByte 待解压资源字节数组
	 */
	public static void incompress(byte[] inByte){
		int resLen = inByte.length;
		byte[] resultByte = new byte[1024];
		Inflater inf = new Inflater();
		inf.setInput(inByte);
		try {
			//对输入的数据进行解压,并将解压后的数据存入resultByte字节数组
			int desLen = inf.inflate(resultByte);
			inf.end(); //关闭解压器,释放所有为处理的输入
			System.out.println("解压前文件大小:" + resLen);
			System.out.println("解压后文件大小:" + desLen);
			System.out.println("解压后文件内容:\n" + new String(resultByte).trim());
		} catch (DataFormatException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}



你可能感兴趣的:(Java)