打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
字符串压缩?java
userphoto

2010.03.23

关注

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

}

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
snippets/438843 | CODE
String和InputStream的转换
java如何打开word文档_如何在Java中打开和操作Word文档/模板?
java 深度克隆
Java图像传输方法
自己写的一个JSP上传文件和下载文件的JavaBean
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服