使用GZIP解压缩数据,以及解决中文乱码

来源:互联网 发布:linux中tail命令 编辑:程序博客网 时间:2024/06/07 03:39
package com.io.test;import java.io.ByteArrayInputStream;import java.io.ByteArrayOutputStream;import java.util.zip.GZIPInputStream;import java.util.zip.GZIPOutputStream;/** * 使用GZIPOutputStream压缩字符串和GZIPInputStream解压缩字符串 * 注意:压缩大数据有效果,如果数据量小的话,压缩后的数据,可能会变大 * */public class CompressAndUnCpmpressTest {// public static String data = "askjkshf";//数据量很小,压缩后的数据会比压缩前大//这个的数据量比较大,效果比较明显,并且数据量越大,效果越明显public static String data = "哈哈askjkshfsahfsahshfnsafsahfsahfsnfskfhsalhfsanflsakhflsahflskaffklsjflskajfsahfkshfksahfskalhfsajhflsahfasddsdsfdsadfsaf";public static void main(String[] args) throws Exception {//判断解压缩前后的数据是否相同System.out.println(unCompress(compress(data)).equals(data));}/*** 对字符串数据进行压缩* @param data 元数据* @return String*/private static String compress(String data) throws Exception{if (null == data || "".equals(data) || data.length() == 0) {return data;}ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();//带有缓存功能的字节输出流GZIPOutputStream gzipOutputStream  = new GZIPOutputStream(byteArrayOutputStream);System.out.println("压缩前的数据大小:" + data.getBytes().length);gzipOutputStream.write(data.getBytes());gzipOutputStream.close();String compressData = byteArrayOutputStream.toString("ISO-8859-1");System.out.println("压缩后的数据大小:" + byteArrayOutputStream.toByteArray().length);byteArrayOutputStream.close();//System.out.println("压缩后的数据:" + compressData);return compressData;}/*** 对压缩后的数据,进行解压缩* @param data* @return String*/public static String unCompress(String data) throws Exception {String retStr = "";if (null == data || "".equals(data) || data.length() == 0) {return data;}ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(data.getBytes("ISO-8859-1"));GZIPInputStream gzipInputStream = new GZIPInputStream(byteArrayInputStream);byte [] b = new byte [256];int length = -1;while (-1 != (length = gzipInputStream.read(b)) ) {byteArrayOutputStream.write(b, 0, length);}retStr = byteArrayOutputStream.toString("UTF-8");byteArrayOutputStream.close();byteArrayInputStream.close();gzipInputStream.close();System.out.println("解压缩后的数据为:" + retStr);return retStr;}}

原创粉丝点击