1. 程式人生 > >使用GZIP解壓縮資料,以及解決中文亂碼

使用GZIP解壓縮資料,以及解決中文亂碼

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;
}


}