您的位置:首页 > 其它

关于Inflater和Deflater的简单用法

2015-01-15 22:40 253 查看
<span style="font-family: Arial, Helvetica, sans-serif;">仅用于记录
</span>
<span style="font-family: Arial, Helvetica, sans-serif;">
</span>
<span style="font-family: Arial, Helvetica, sans-serif;">package com.yx.io;</span>
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();
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: