/**
* ========================================================
* 日 期:2011-12-28 上午11:03:24
* 作 者:张纪豪
* 版 本:1.0.0
* ========================================================
* 修订日期 修订人 描述
*
*/
package org.howsun.util;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.UnsupportedEncodingException;
import java.util.zip.GZIPInputStream;
import java.util.zip.GZIPOutputStream;
import org.howsun.util.security.Codings;
/**
* 功能描述:
*
* @author howsun(howsun.zhang@google.com)
* @version 1.0.0
*/
public abstract class Compressor{
/**
* 压缩流,节省传输资源
*
* @return
*/
public static String compressStream(String src){
if(!Strings.hasLength(src)){return src;}
ByteArrayOutputStream baos = null;
GZIPOutputStream gzip = null;
try {
baos = new ByteArrayOutputStream();
gzip = new GZIPOutputStream(baos);
gzip.write(src.getBytes("UTF-8"));
gzip.finish();
return Codings.base64Encode(baos.toByteArray());
} catch (Exception e) {
e.printStackTrace();
} finally{
if(gzip != null){
try {gzip.close();} catch (Exception e2) {}
}
if(baos != null){
try {baos.close();} catch (Exception e2) {}
}
}
return null;
}
// 解压缩
public static String unCompressStream(String src){
if(!Strings.hasLength(src)){return src;}
ByteArrayInputStream in = null;
GZIPInputStream gunzip = null;
ByteArrayOutputStream out = null;
try {
out = new ByteArrayOutputStream();
in = new ByteArrayInputStream(Codings.base64Decode(src));
gunzip = new GZIPInputStream(in);
byte[] buffer = new byte[256];
int n;
while ((n = gunzip.read(buffer)) >= 0) {
out.write(buffer, 0, n);
}
return out.toString("UTF-8");
}
catch (Exception e) {
e.printStackTrace();
}
finally{
if(out != null){
try {out.close();} catch (Exception e2) {}
}
if(gunzip != null){
try {gunzip.close();} catch (Exception e2) {}
}
if(in != null){
try {in.close();} catch (Exception e2) {}
}
}
return src;
}
public static void main(String[] args) throws Exception {
String t = "7b227374617465223a312c22636f6e74656e74223a223c703e3c7370616e2069643d5c22636f6d702d70617374652d6469762d323730365c223ee794b5e88491e4bd8ee4bbb7e587bae594ae3c7370616e2069643d5c22636f6d702d70617374652d6469762d323730365c223ee794b5e88491e4bd8ee4bbb7e587bae594ae3c2f7370616e3e3c2f7370616e3e3c62723e3c2f703e222c22736f75726365223a302c2275726c223a22687474703a2f2f626a2e35382e636f6d2f6469616e6e616f2f222c22656d61696c223a22222c22746167223a22222c22706172616d73223a225b7b5c22495c223a313232332c5c22565c223a5c22305c227d2c7b5c22495c223a313232342c5c22565c223a5c22305c227d2c7b5c22495c223a313232352c5c22565c223a5c22365c227d2c7b5c22495c223a313232362c5c22565c223a5c2239393939395c227d2c7b5c22495c223a353632312c5c22565c223a5c22333530315f3939393939395c227d2c7b5c22495c223a353333322c5c22565c223a5c22e8bdace8aea97ce58fb0e5bc8fe69cba7c36e68890e4bba5e4b88b7c3939393939e585835c227d2c7b5c22495c223a353333332c5c22565c223a5c22e9bb84e58588e7949f5c227d2c7b5c22495c223a353436312c5c22565c223a5c22747970653d25453825424425414325453825414525413926616d703b6f626a656374747970653d25453525384625423025453525424325384625453625394325424126616d703b6f6c646c6576656c3d3625453625383825393025453425424225413525453425423825384226616d703b6d696e7072696365716a3d333530302545352538352538332545342542422541352545342542382538415c227d2c7b5c22495c223a353932332c5c22565c223a5c223337373639333835305c227d5d222c22736f72744944223a3337373639333835302c2270617261223a5b7b2276616c7565223a7b22706172616d6574657256616c7565223a2230222c22696e666f4944223a383233363636373037393239382c22706172616d657465724944223a313232337d2c226b6579223a2231323233227d2c7b2276616c7565223a7b22706172616d6574657256616c7565223a2230222c22696e666f4944223a383233363636373037393239382c22706172616d657465724944223a313232347d2c226b6579223a2231323234227d2c7b2276616c7565223a7b22706172616d6574657256616c7565223a2236222c22696e666f4944223a383233363636373037393239382c22706172616d657465724944223a313232357d2c226b6579223a2231323235227d2c7b2276616c7565223a7b22706172616d6574657256616c7565223a223939393939222c22696e666f4944223a383233363636373037393239382c22706172616d657465724944223a313232367d2c226b6579223a2231323236227d2c7b2276616c7565223a7b22706172616d6574657256616c7565223a22333530315f393939393939222c22696e666f4944223a383233363636373037393239382c22706172616d657465724944223a353632317d2c226b6579223a2235363231227d2c7b2276616c7565223a7b22706172616d6574657256616c7565223a22e8bdace8aea97ce58fb0e5bc8fe69cba7c36e68890e4bba5e4b88b7c3939393939e58583222c22696e666f4944223a383233363636373037393239382c22706172616d657465724944223a353333327d2c226b6579223a2235333332227d2c7b2276616c7565223a7b22706172616d6574657256616c7565223a22e9bb84e58588e7949f222c22696e666f4944223a383233363636373037393239382c22706172616d657465724944223a353333337d2c226b6579223a2235333333227d2c7b2276616c7565223a7b22706172616d6574657256616c7565223a22747970653d25453825424425414325453825414525413926616d703b6f626a656374747970653d25453525384625423025453525424325384625453625394325424126616d703b6f6c646c6576656c3d3625453625383825393025453425424225413525453425423825384226616d703b6d696e7072696365716a3d33353030254535253835253833254534254242254135254534254238253841222c22696e666f4944223a383233363636373037393239382c22706172616d657465724944223a353436317d2c226b6579223a2235343631227d2c7b2276616c7565223a7b22706172616d6574657256616c7565223a22333737363933383530222c22696e666f4944223a383233363636373037393239382c22706172616d657465724944223a353932337d2c226b6579223a2235393233227d5d2c226c6f63616c223a5b7b22646973704c6f63616c4944223a313230302c22696e666f4944223a383233363636373037393239382c22696e666f4c6f63616c4944223a302c226c6f63616c4944223a313230307d2c7b22646973704c6f63616c4944223a383732382c22696e666f4944223a383233363636373037393239382c22696e666f4c6f63616c4944223a302c226c6f63616c4944223a383730367d5d2c22696e666f4944223a383233363636373037393239382c2270686f6e65223a223135383031363436333630222c22636174654944223a33352c227469746c65223a22e794b5e88491e4bd8ee4bbb7e587bae594ae222c2261646444617465223a313332343334383633343135372c22706f737444617465223a313332343334393835303639302c2265666665637469766544617465223a313332343935343635303639302c226c6f63616c73223a225b7b5c22445c223a313230302c5c224c5c223a313230307d2c7b5c22445c223a383732382c5c224c5c223a383730367d5d222c22757365724944223a333831333438313736313533372c22757365724950223a2231302e35382e32372e3134222c22706963223a22222c22696d223a22222c22686964654974656d223a22222c22696e666f54797065223a302c22697342697a223a66616c73652c2275736572546167223a22227d";
System.out.println("16位转换结果长度:"+t.getBytes("UTF-8").length);
String s = new String(Codings.hexDecode(t));
System.out.println("原串长度:"+s.getBytes("UTF-8").length);
String c = compressStream(s);
System.out.println("压缩串:"+c);
System.out.println("压缩长度:"+c.getBytes().length);
String hc = Codings.hexEncode(c.getBytes());
System.out.println(hc);
System.out.println("压缩后转16位长度:"+hc.getBytes("UTF-8").length);
String un = unCompressStream(c);
System.out.println(un);
System.out.println("反压缩长度:"+un.getBytes("UTF-8").length);
}
}