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. NSFileHandle 和 NSFileManager的一些用法

    文件操作 NSFileManager 常见的NSFileManager文件的方法: -(BOOL)contentsAtPath:path 从文件中读取数据 -(BOOL)createFileAtPat ...

  2. uc/os初始化

        操作系统初始化函数OS_INIT是操作系统在开始运行的最初,对全局变量.任务控制块.就绪表.事件及消息队列等重要数据结构进行的初始化操作,并创建空闲任务.统计任务等系统任务.该函数必须在创建用 ...

  3. hdu 3778

    简单的dfs  但繁琐的可以了 0.0 #include<cstdio> #include<cstring> #include<algorithm> using s ...

  4. uva 10608

    简单并查集  水水..... #include <cstdio> #include <cstring> #define maxn 30005 int fa[maxn],ans[ ...

  5. Samza文档翻译 : Concepts

    此页介绍啊Samza的一些高层级概念. Streams Samza处理Streams(流).流由同一类型的不可变的消息组成.例如,一个流可以是对一个网站的所有点击,或者对一个数据库表的所有更新,或者一 ...

  6. Android Activity的切换动画

    Android的Activity切换有两种方法, 第一种是用代码方式实现: Activity A跳转到Activity B,要在startActivity(intent)后面加上overridePen ...

  7. UIWebView与JS的深度交互

    我要实现这样一个需求:按照本地的CSS文件展示一串网络获取的带HTML格式的只有body部分的文本,需要自己拼写完整的 HTML.除此之外,还需要禁用获取的HTML文本中自带的 < img &g ...

  8. AC题目简解-dp

    dp类:A - Bridging signals ZOJ 3627 POJ1631 HDU1950给出一个从1-n的数字排列,求最长上升子序列长度.直接说解法吧.新开一个数组d,d[i]表示的是能构成 ...

  9. 99. Recover Binary Search Tree

    题目: Two elements of a binary search tree (BST) are swapped by mistake. Recover the tree without chan ...

  10. Android Spannable

    ApiDemo 源码至 com.example.android.apis.text.Link 类. 首先,看一下其运行效果: 要给 TextView 加上效果,方式主要有几种: 第一种,自动应用效果, ...