关于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(); } } }
相关文章推荐
- Deflater 和 Inflater 在java中的用法以及注意的参数问题
- Deflater 和 Inflater 的用法
- 关于Timer的用法,先简单记下,稍后编辑
- java deflater压缩 inflater解压
- java中关于日期和时间的类的简单用法
- Android关于ExpandableListView用法的一个简单小例子。仿QQ列表
- 关于ExpandableListView用法的一个简单小例子
- 关于c#中的Timer控件的简单用法
- 【c#】关于c#中data控件的简单用法介绍
- 关于c#中的Timer控件的简单用法
- 关于openFileOutput及文件存储,删除,读取简单用法
- 关于 AppDelegate 、UIApplication 简单的用法
- 关于jsp中session,application的简单介绍以及用法
- 关于c#中的Timer控件的简单用法
- 关于List中FindAll用法的一些简单示例
- 关于ExpandableListView用法的一个简单小例子
- 关于oracle10g数据泵简单用法
- 关于Arrays和LinkedList的简单用法
- 关于数据库SQL管理的一些简单用法
- 关于UIButton嵌入到UIView点击无反应问题的解决方法和delegate的简单用法示例(转载)