package unzip; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.util.zip.GZIPInputStream; import java.util.zip.GZIPOutputStream; import java.util.zip.*; // 将一个字符串按照zip方式压缩和解压缩 public class ZipUtil { // 压缩 public static String compress(String str) throws IOException { if (str == null || str.length() == 0) { return str; } ByteArrayOutputStream out = new ByteArrayOutputStream(); GZIPOutputStream gzip = new GZIPOutputStream(out); gzip.write(str.getBytes()); gzip.close(); return out.toString("ISO-8859-1"); } // 解压缩 public static String uncompress(String str) throws IOException { if (str == null || str.length() == 0) { return str; } ByteArrayOutputStream out = new ByteArrayOutputStream(); ByteArrayInputStream in = new ByteArrayInputStream(str.getBytes("ISO-8859-1")); GZIPInputStream gunzip = new GZIPInputStream(in); byte[] buffer = new byte[256]; int n; while ((n = gunzip.read(buffer)) >= 0) { out.write(buffer, 0, n); } // toString()使用平台默认编码,也可以显式的指定如toString("GBK") return out.toString("ISO-8859-1"); } public static final byte[] compress1(String str) { if(str == null) return null; byte[] compressed; ByteArrayOutputStream out = null; ZipOutputStream zout = null; try { out = new ByteArrayOutputStream(); zout = new ZipOutputStream(out); zout.putNextEntry(new ZipEntry("0")); zout.write(str.getBytes()); zout.closeEntry(); compressed = out.toByteArray(); } catch(IOException e) { compressed = null; } finally { if(zout != null) { try{zout.close();} catch(IOException e){} } if(out != null) { try{out.close();} catch(IOException e){} } } return compressed; } public static final String decompress(byte[] compressed) { if(compressed == null) return null; ByteArrayOutputStream out = null; ByteArrayInputStream in = null; ZipInputStream zin = null; String decompressed; try { out = new ByteArrayOutputStream(); in = new ByteArrayInputStream(compressed); zin = new ZipInputStream(in); ZipEntry entry = zin.getNextEntry(); byte[] buffer = new byte[1024]; int offset = -1; while((offset = zin.read(buffer)) != -1) { out.write(buffer, 0, offset); } decompressed = out.toString(); } catch (IOException e) { decompressed = null; } finally { if(zin != null) { try {zin.close();} catch(IOException e) {} } if(in != null) { try {in.close();} catch(IOException e) {} } if(out != null) { try {out.close();} catch(IOException e) {} } } return decompressed; } // 测试方法 public static void main(String[] args) throws IOException { System.out.println("starttime="+ZipUtil.compress("starttime")); String s=ZipUtil.compress("starttime"); System.out.println(s); System.out.println(ZipUtil.uncompress(s)); System.out.println("starttime="+ZipUtil.compress1("starttime")); System.out.println("starttime="+ZipUtil.decompress(ZipUtil.compress1("starttime"))); } }