java 压缩技术
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 = "@UEsDBBQACAgIAFZ2dUkAAAAAAAAAAAAAAAABAAAAMO1dXXPTxhr+K7npcJVasnEaGHU7fBwK05IO"
+ "MzAQbjKJbDl2/IXtJISrlIGSHBKSc06mFEhpoQPlAMmcM6UQIIQfU8t2rvgLXWkl7btKlNiJnEjx"
+ "OwPW7vvsh1abXT3P+64T5auruWzXWLJUThfyXx6SP5cOdSXzaiGRzqe+PHTh/Knu3kNfEaVElGSa"
+ "KBHjI5kzEjnDkiD50WzWMCeIog0SSYnQT0UdJtGoEqEXpVQh311UIvSiqCo50ddPzSpNl6yaNKFU"
+ "EiQqyT3dskz/dUnSUYm2Q41K0mmfZtSCXaVAq6hWhiaUcp7ISoR+KsWKZaYJJZUmZ5QI/VSKJbu4"
+ "kVIy2kBlopg07tZOKsXywGDOLmSmDZM6yk00rZQ1Wj1ifmZT5NqwEqEXpWz+H6iQS2f6T3zzNS1g"
+ "ZAxTmZiZspkBo+w1zQnTXLS6MJOGQWOfeXL2QjTaI5sIzZnGCmtQY81rZXLqWP/xc5eYkXWj5Yh8"
+ "5GhMYrYcs5VoY8xQYoYJ3itNm6YMMGWYSQMmdlvOQ2Jp1tY4bGzcqgqNmmVUrYtzrZBTrISRtGya"
+ "kxgkx06et3HjB4umhlStSGK9R9j4zJxdfIjbWdYGCuNaQsRMiw2rIubcnLsSr5EEYzOzNqCJAB9K"
+ "ig9USznWYXLxH8dlSTrsYMMOlibnIrWFt7XFX9YnJ+tPntUWXjdevXUKpp2CGdKYel6fW2r8fkNf"
+ "vl9/+r7+4l7t7uv1u6+i+v/maEqfnv20OqPf/L6xvKLfnKWt1B68ok2zarW7T2gftADrhhagPVld"
+ "Tt+uv1+i5T+tPtimj0+rU/r8i0+r09W3t/UfbjZu/WFV+PPN+m8P9fk7tAM2Gtq6Pvejvvxw/d5N"
+ "2sf6z4+r79/Ufl2Nf6bP/WTcGO90xhn5pjVk6bP6/Rsbb1Wfn2lM/b/6YZY1aIz96XWWpo+C3otZ"
+ "63p94RmtSJuit0wHoi/9pC8+098sU4vR9eJk49GTxus/bMsDdvu0i+rKHX32Fu2CpmlfxhOe+1d9"
+ "4RfzMczoU/doXWZnd+5U1P89wyrSNtcf//zX5PUu66G/W6B9rz/9sfbyUePjfGPtP/rqpP77bXpn"
+ "dHroMzQe7/JjWrL+8mV1ZZI+29ryn7XF59UPH41h3L9BO66+v8PK6I9e0Oqg7rQ++311Zbq68ry2"
+ "OEVnpzY3r996Zz7fNXpn1ZVF2mB1Zbb6bkr/58P6/A/0zpwftIzzgzZC+FoYcaxZYM061py4dHIO"
+ "kAfF83yFEulzsDode5HIjpUv9CvAesWxloQ2So69DEqXHWsFWPnWMyq0MerYx0DpMcc6DqzjfHNI"
+ "g+QgGK6R48gQqGzkOKIKiAqQhNAa2I/SSaFOEiCagGgASQmtpQAyLNQZBkhaQOBIMyQKkAxARshp"
+ "gIwAJEtkWCkLoBw5C5AcQPLCbecBUhCQAkCKwm0XhQmS/Z2heIBnSI55TtFZzymSPGeoz3OGZM8Z"
+ "kj1nSMIZygitiRPU5zlB3kvo9A6WkPcEuZYQzzilror056oDTIjAhANcE4FrnPvJRJZ7+W3SvMPz"
+ "ZLHSEIdUGYxM5faEq0qCQ0kXlOSQ5oI0DqVcUIpDwy5omENpF5TmUMYFZTg0IgtvpRGOZEUky5Gc"
+ "iOQ4kheRPEcK8OEVuL3ourUih67AKle4vQTtJW4vQ3uZ2yuuLiocGpXBD94ot4+5qtC8MjQ6QRXD"
+ "qexgyqgDckqxkM5XygP50dxQsmSAokHJJY3rQDY5lsxa7QomZShaGVALuVy6bChlcth8hi4jFb6J"
+ "gWIprSaZqrT0qmh0bngzvXPi9MlW9I58JO6pdwTMpXcEDOodAdil3qFjAY3ttehxBMleqJ/9Fj0H"
+ "W0kIP5QdrCSQBgWCBiFPDa+SQDG+h2IclQQqCRWVhB9KQmpNRpzp49GGZsImW0RNtgiaeMVM/AuZ"
+ "0HGAd2rzEoJyYcq7GdvfVDzo/32l3/jIuDnj/BZP38DDN1UEvvjH0T2Ob+Q9fiPvxD3eOROEnDbg"
+ "ExRkVYiUFimtlQ8+pZUCQGm3c45bKXtI9rVCjtlQKyeGnKfhor7d/PG5mK/w/FzUF9SCzBeYd0d8"
+ "xdUDaK+4dgDnFVcOYLriutkhVwUD256qig8OcFVxnQC6ClYJoKtCcchXBQBSVt4OpKxCcchZxRUC"
+ "aCtvh9NWf3dvAWl69xYg3MA7eANvs0+irft3/072b4fuuCOgkAa5I6AQc0dAISZEQCGwu128n68f"
+ "sIUH7sSnd2xy09OVeBAUD4K2Fr6FK2p7+hA/qJ4uGM472Do9pJ6uDgrfhsiT0pkTFCZfJM+0SS2h"
+ "r4slUSoFTyrJ8b08CIoyCGUQyiCUQSyNMghlEMqgXcwQyqCATxDKoOZkENylm1NBsIYogiDStAaC"
+ "lZqWQLCSqIAgggLISoZYAMm+nF/1VD9Rb/EDILf2AZAgfYB9l8rnIJ9fhY8Jz6+qSGftXMDobOdM"
+ "UDjZbOfMD5LZ5sgs+vTNJFLa/Tq/6otP30rZQ7KvFXLchvw5//TFFo5/gG1w/ANiKjr+AbA7+nuc"
+ "L6CNzBcMU+S+1ZVZfe1ufWmt8eEl48FbBABg4e2d8hgPwHhAgOIBYKFtL6BkPxRU3AcF5c9x6jD9"
+ "agtx53MRQRcockE4qvBywU6ep3BqqiDH2NoxS2FyTaCyQmUVXGUVhGDBHpyW2qloApgomgDQRtGE"
+ "kgklU0dLJrDMQiSZvIJOqJhQMR24eULFhIqpqWkKhWLCg1WolYKslfBglYoHq3bLcfFglZNr7o2M"
+ "B6s6aoLCSWk7Z37CJA33k8yi+99MIqU9mAerztmQLwerJMmb+0LMTX4hJrBfCOyO/p7jCwgwX26F"
+ "nJe5+xnvrS+tdW3KesWYwAzLMke/k2VM94A7mOEcdepvOnTxcJeDSWQSLlAkE/DNJ5IJVzWRT7hA"
+ "kVLANtvvJXNVE6mFCxTZhQsUCYYLFDmGC2yWpyPNQJph5YNPM9rsOQvGIQMkEEgg7HXcovOuRf7g"
+ "5b9rkT60I0yN7AEYkD2wzRMjbsgbwsobMOCmYsBts3c2BtyEl3SQ4wUYcAv4BGHALdjzgwG35rgs"
+ "esLMJDLa/Qq4tTXedsmG8A9xccorLhxAdMVls0Oqin+IC/8QF+7fAdq/2+yR8PUPcbGEdTUvxijN"
+ "kVbIifMX+r752sTYmi2zgmxZJ0hUknu6Zbk7yp4S21bBVmJtI+wzT85eiEZ7rAdq7UkVq2drSyiT"
+ "yyxvbRw52sXRmDVt1uZWou0wg7XtwDVuLXC4s1rbKtzQ2R0NArfpoNX4xDhszNpgNGh0dp2N777L"
+ "VFu/V/ro8YuqwQ0DxluKAvb64VKM+eFTbMsBIqCO/fCLxGBz+OU6kOPIzvyL7YjVxoM/W+F0Nnbo"
+ "ZAXA8xigKHoP2AxF8RqLeYbRgcsElSsq1wB7Ht0J7zN4/gorAAnCCtjbJ6w8PYuoqVBTdbKmAqsv"
+ "TJqqHacqUVLZaZRUQZwtlFQhmiyUVG2TVHgyGdVU2E4me0gpucdTSkHIfTIZQMLJZGDHk8neJ5PB"
+ "Y8KTyao/bNffNzJsDU8mH/gJCiez7Zz5CQCZDdDJZG8yiyeTzSQy2gNxMpklXCfb+GFcg9Zpqi3w";
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 压缩技术的更多相关文章
- Java压缩技术(二) ZIP压缩——Java原生实现
原文:http://snowolf.iteye.com/blog/642298 去年整理了一篇ZLib算法Java实现(Java压缩技术(一) ZLib),一直惦记却没时间补充.今天得空,整理一下ZI ...
- Java压缩技术的学习
由于工作的需要,经常要手动去打上线安装包,为了方便,自己写程序去帮助打包.使用过Unix或者Linux的人都基本上都用过tar打包以及gzip压缩,但在Windows下使用得最多的压缩还是RAR和Zi ...
- Java压缩技术(三) ZIP解压缩——Java原生实现
原文:http://snowolf.iteye.com/blog/642492 JavaEye的朋友跟我说:“你一口气把ZIP压缩和解压缩都写到一个帖子里,我看起来很累,不如分开好阅读”.ok,面向读 ...
- Java压缩技术(一) ZLib
原文:http://snowolf.iteye.com/blog/465433 有关ZLib可参见官方主页 http://www.zlib.net/ ZLib可以简单的理解为压缩/解压缩算法,它与ZI ...
- Java后端实现图片压缩技术
今天来说说图片压缩技术,为什么要使用图片压缩,图片上传不就完事了吗?对的,这在几年前可以这么说,因为几年前还没有现在这么大的并发,也没有现在这么关注性能. 如今手机很多,很多人都是通过手机访问网络或者 ...
- (转)java缓存技术,记录
http://blog.csdn.net/madun/article/details/8569860 最近再ITEYE上看到关于讨论JAVA缓存技术的帖子比较多,自己不懂,所以上网大概搜了下,找到一篇 ...
- 深入分析Java Web技术内幕(修订版)
阿里巴巴集团技术丛书 深入分析Java Web技术内幕(修订版)(阿里巴巴集团技术丛书.技术大牛范禹.玉伯.毕玄联合力荐!大型互联网公司开发应用实践!) 许令波 著 ISBN 978-7-121- ...
- JAVA缓存技术之EhCache
最近再ITEYE上看到关于讨论JAVA缓存技术的帖子比较多,自己不懂,所以上网大概搜了下,找到一篇,暂作保存,后面如果有用到可以参考.此为转贴,帖子来处:http://cogipard.info/ar ...
- JAVA缓存技术之EhCache(转)
最近再ITEYE上看到关于讨论JAVA缓存技术的帖子比较多,自己不懂,所以上网大概搜了下,找到一篇,暂作保存,后面如果有用到可以参考.此为转贴,帖子来处:http://cogipard.info/ar ...
随机推荐
- js中replace的正则替换
temp: video":"\t<ul class=\"g-list tabview-cont on\">\t\r\n\t\t<li clas ...
- C++函数中那些不可以被声明为虚函数的函数
转自C++函数中那些不可以被声明为虚函数的函数 常见的不不能声明为虚函数的有:普通函数(非成员函数):静态成员函数:内联成员函数:构造函数:友元函数. 1.为什么C++不支持普通函数为虚函数? 普通函 ...
- 打车APP可能的盈利模式
贺滨,蓄力的芦苇 竺宇祺.郑子威.党培兵 等人赞同 按现在国内几十家类似start-ups的竞争态势看,嘀嘀现阶段应该还处于烧钱培育市场期. 斗胆想象一下可能的盈利模式: 前向收费(面向用户): 特权 ...
- Google Play市场考察报告
考察了Google Play日本市场的10款应用,考察的重点在于每个App有什么亮点,盈利模式在哪里.本文并不是App的功能介绍. (1)恋爱文集[文库类应用] 该应用收录了一些恋爱文章,其主要受众是 ...
- poj The Clocks 高斯消元
由于数据量不大,所以这题有很多解法. 我用的是高斯消元化为逆矩阵解决的…… 代码如下: #include<stdio.h> #include<iostream> using n ...
- 【零基础学习iOS开发】【02-C语言】09-流程控制
前言 1.默认的运行流程 默认情况下,程序的运行流程是这样的:运行程序后,系统会按书写顺序执行程序中的每一行代码.比如下面的程序 1 #include <stdio.h> 2 3 int ...
- pointcut 表达式的含义
execution(* com.spring.dao.*.add*(..)) 第一个*表示任意返回值 第二个*表示com.spring.dao包中所有类 第三个*表示以add开头的所有方法 (..)表 ...
- mybatis怎样配置数据库集群
场景:一个读数据源一个读写数据源. 原理:借助spring的[org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource] ...
- Flash Media Server 5.0 (FMS)注册码
flash media server 4.5 及最新 flash media server 5.0 注册码 防止图片打不开时: Name:tam/CORE Serial:1652-5580-8001- ...
- JavaScript DOM高级程序设计 2.4-try{}catch{}--我要坚持到底!
先看一段有异常的语句 var sound = 'Roar!'; function myOrneryBeast() { this.style.color='green';//window没有style属 ...