package zip;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.zip.Deflater;
import java.util.zip.DeflaterOutputStream;
import java.util.zip.Inflater;
import java.util.zip.InflaterInputStream;

public class Test {


public static void main(String[] args) {

String inStr = "@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";
System.err.println("字节压缩/解压缩测试");
System.err.println("输入字符串:\t" + inStr);
byte[] input = inStr.getBytes();
System.err.println("输入字节长度:\t" + input.length);

byte[] data = compress(input);
System.err.println("压缩后字节长度:\t" + data.length);

byte[] output = decompress(data);
System.err.println("解压缩后字节长度:\t" + output.length);
String outputStr = new String(output);
System.err.println("输出字符串:\t" + outputStr);


}

/**
* 压缩
*
* @param data
* 待压缩数据
* @return byte[] 压缩后的数据
*/
public static byte[] compress(byte[] data) {
byte[] output = new byte[0];

Deflater compresser = new Deflater();

compresser.reset();
compresser.setInput(data);
compresser.finish();
ByteArrayOutputStream bos = new ByteArrayOutputStream(data.length);
try {
byte[] buf = new byte[1024];
while (!compresser.finished()) {
int i = compresser.deflate(buf);
bos.write(buf, 0, i);
}
output = bos.toByteArray();
} catch (Exception e) {
output = data;
e.printStackTrace();
} finally {
try {
bos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
compresser.end();
return output;
}

/**
* 压缩
*
* @param data
* 待压缩数据
*
* @param os
* 输出流
*/
public static void compress(byte[] data, OutputStream os) {
DeflaterOutputStream dos = new DeflaterOutputStream(os);

try {
dos.write(data, 0, data.length);

dos.finish();

dos.flush();
} catch (IOException e) {
e.printStackTrace();
}
}

/**
* 解压缩
*
* @param data
* 待压缩的数据
* @return byte[] 解压缩后的数据
*/
public static byte[] decompress(byte[] data) {
byte[] output = new byte[0];

Inflater decompresser = new Inflater();
decompresser.reset();
decompresser.setInput(data);

ByteArrayOutputStream o = new ByteArrayOutputStream(data.length);
try {
byte[] buf = new byte[1024];
while (!decompresser.finished()) {
int i = decompresser.inflate(buf);
o.write(buf, 0, i);
}
output = o.toByteArray();
} catch (Exception e) {
output = data;
e.printStackTrace();
} finally {
try {
o.close();
} catch (IOException e) {
e.printStackTrace();
}
}

decompresser.end();
return output;
}

/**
* 解压缩
*
* @param is
* 输入流
* @return byte[] 解压缩后的数据
*/
public static byte[] decompress(InputStream is) {
InflaterInputStream iis = new InflaterInputStream(is);
ByteArrayOutputStream o = new ByteArrayOutputStream(1024);
try {
int i = 1024;
byte[] buf = new byte[i];

while ((i = iis.read(buf, 0, i)) > 0) {
o.write(buf, 0, i);
}

} catch (IOException e) {
e.printStackTrace();
}
return o.toByteArray();
}
}

测试结果:

java 压缩技术的更多相关文章

  1. Java压缩技术(二) ZIP压缩——Java原生实现

    原文:http://snowolf.iteye.com/blog/642298 去年整理了一篇ZLib算法Java实现(Java压缩技术(一) ZLib),一直惦记却没时间补充.今天得空,整理一下ZI ...

  2. Java压缩技术的学习

    由于工作的需要,经常要手动去打上线安装包,为了方便,自己写程序去帮助打包.使用过Unix或者Linux的人都基本上都用过tar打包以及gzip压缩,但在Windows下使用得最多的压缩还是RAR和Zi ...

  3. Java压缩技术(三) ZIP解压缩——Java原生实现

    原文:http://snowolf.iteye.com/blog/642492 JavaEye的朋友跟我说:“你一口气把ZIP压缩和解压缩都写到一个帖子里,我看起来很累,不如分开好阅读”.ok,面向读 ...

  4. Java压缩技术(一) ZLib

    原文:http://snowolf.iteye.com/blog/465433 有关ZLib可参见官方主页 http://www.zlib.net/ ZLib可以简单的理解为压缩/解压缩算法,它与ZI ...

  5. Java后端实现图片压缩技术

    今天来说说图片压缩技术,为什么要使用图片压缩,图片上传不就完事了吗?对的,这在几年前可以这么说,因为几年前还没有现在这么大的并发,也没有现在这么关注性能. 如今手机很多,很多人都是通过手机访问网络或者 ...

  6. (转)java缓存技术,记录

    http://blog.csdn.net/madun/article/details/8569860 最近再ITEYE上看到关于讨论JAVA缓存技术的帖子比较多,自己不懂,所以上网大概搜了下,找到一篇 ...

  7. 深入分析Java Web技术内幕(修订版)

    阿里巴巴集团技术丛书 深入分析Java Web技术内幕(修订版)(阿里巴巴集团技术丛书.技术大牛范禹.玉伯.毕玄联合力荐!大型互联网公司开发应用实践!) 许令波 著   ISBN 978-7-121- ...

  8. JAVA缓存技术之EhCache

    最近再ITEYE上看到关于讨论JAVA缓存技术的帖子比较多,自己不懂,所以上网大概搜了下,找到一篇,暂作保存,后面如果有用到可以参考.此为转贴,帖子来处:http://cogipard.info/ar ...

  9. JAVA缓存技术之EhCache(转)

    最近再ITEYE上看到关于讨论JAVA缓存技术的帖子比较多,自己不懂,所以上网大概搜了下,找到一篇,暂作保存,后面如果有用到可以参考.此为转贴,帖子来处:http://cogipard.info/ar ...

随机推荐

  1. Nhibernate 多对多级联更新

    问题是这样的,有两个表:文章(Article)和分类(Lable),这两者之间的关系是多对多关联,如果你用Nhibernate来保存数据的话非常的好操作,新建Article,然后把Lable值赋值给A ...

  2. 小啃机器学习(1)-----ID3和C4.5决策树

    第一部分:简介 ID3和C4.5算法都是被Quinlan提出的,用于分类模型,也被叫做决策树.我们给一组数据,每一行数据都含有相同的结构,包含了一系列的attribute/value对. 其中一个属性 ...

  3. vs2008+cmake2.8+OpenCV2.8.4配置过程中OpenCV.sln重编译部分工程失败

    解决方法来自此链接 http://www.tuicool.com/articles/qiQBb2N vs2008+cmake2.8+OpenCV2.8.4配置过程 1.解压opencv2.4.8 2. ...

  4. Interlocked.Increment 方法 和Interlocked.Decrement 方法作用

    Interlocked.Increment 方法:让++成为原子操作:Interlocked.Decrement 方法让--成为原子操作.什么叫原子操作呢.就是不会被别人打断,因为C#中的一个语句,编 ...

  5. 1025: [SCOI2009]游戏 - BZOJ

    Description windy学会了一种游戏.对于1到N这N个数字,都有唯一且不同的1到N的数字与之对应.最开始windy把数字按顺序1,2,3,……,N写一排在纸上.然后再在这一排下面写上它们对 ...

  6. mysql学习链接

    1 传智播客PHP培训.刘道成.PHP视频教程.mysql http://down.51cto.com/zt/887

  7. Java Socket实战之一 单线程通信

    本文地址:http://blog.csdn.net/kongxx/article/details/7259436 现在做Java直接使用Socket的情况是越来越少,因为有很多的选择可选,比如说可以用 ...

  8. Winform 控件使用集锦

    DataGridView中checkbox的值读取问题.checkbox选中之后,在CellClick事件中通过Value是读取不到值的,在当前单元格变为另一个单元格之前,它的值不会写到DataGri ...

  9. python学习笔记二--列表的使用

    一.基本列表操作 1. 合并‘+’:左右两边必须均为列表 可以用str(),%,list()做类型的转换后再做合并 2. 重复‘*’: 3. 迭代和解析: x作为for循环里步进变量,由于列表是序列, ...

  10. Go语言Revel框架 环境搭建

    1.首先参考连个链接 http://blog.csdn.net/creak_phone/article/details/12620969 http://www.geek521.com/?p=616 2 ...