使用GZIP解壓縮資料,以及解決中文亂碼
阿新 • • 發佈:2019-01-10
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; } }