您的位置:首页 > 其它

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

2017-11-01 09:57 2056 查看
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;
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  gzip 压缩 压缩乱码
相关文章推荐