假如这个世界上只剩下你一个人,当你正坐在屋子里的时候,这时突然响起了敲门声...

字符串的压缩和解压缩

上一篇 / 下一篇  2008-05-01 18:14:19

查看( 106 ) / 评论( 3 )
数据传输时,有时需要将数据压缩和解压缩,本例使用GZIPOutputStream/GZIPInputStream实现。
XmYV'f0 ITPUB个人空间0c,l5c1[1U%a3UH
1、使用ISO-8859-1作为中介编码,可以保证准确还原数据ITPUB个人空间%hb6NhqTQ/jZ/o
2、字符编码确定时,可以在uncompress方法最后一句中显式指定编码ITPUB个人空间%E_5G$]Nf7E
import java.io.ByteArrayInputStream;
O r O `*d/~6h0 import java.io.ByteArrayOutputStream;
p7[Jke0 import java.io.IOException;ITPUB个人空间D2X1s+]?5c7^
import java.util.zip.GZIPInputStream;
"v,h6z%k#b$KWz0 import java.util.zip.GZIPOutputStream;ITPUB个人空间[ac!x6wH
ITPUB个人空间4~.BFIF3R.J!d]
// 将一个字符串按照zip方式压缩和解压缩ITPUB个人空间/[(Q:l? o
public class ZipUtil {
7Q)F_L:o/|`0 ITPUB个人空间%WpK3t~/pW1m
  // 压缩
i,y_\L&E l(xO0   public static String compress(String str) throws IOException {
gH;M Q{V0     if (str == null || str.length() == 0) {ITPUB个人空间+ZOP-XH\!j
      return str;
A4V,RA ]~C B-Q[Mg0     }ITPUB个人空间a'n;h6yS)R5i+g|%cc
    ByteArrayOutputStream out = new ByteArrayOutputStream();
Abn&t5v&c"e0     GZIPOutputStream gzip = new GZIPOutputStream(out);ITPUB个人空间a4V5o6WZ-gG5k}
    gzip.write(str.getBytes());
O~)Z/o_,K,Vk"C0r0     gzip.close();ITPUB个人空间P$@$F]6VX.W.@A X4S;P
    return out.toString("ISO-8859-1");ITPUB个人空间3\ xj h,Y}v1u0lZ:p
  }ITPUB个人空间 p.A,?PE
ITPUB个人空间X(k+dYP@ u
  // 解压缩ITPUB个人空间 r jr~ferh
  public static String uncompress(String str) throws IOException {
WN1P!{UL2F0     if (str == null || str.length() == 0) {ITPUB个人空间6GU@#Bq-`
      return str;ITPUB个人空间*^,TA1Y t9~[
    }ITPUB个人空间s!@/hIz)I
    ByteArrayOutputStream out = new ByteArrayOutputStream();ITPUB个人空间fi-z9VaJ I$u
    ByteArrayInputStream in = new ByteArrayInputStream(strITPUB个人空间6N-Wg}j$zu'd6s-v
        .getBytes("ISO-8859-1"));ITPUB个人空间Ht6Z(At"Q.G(e
    GZIPInputStream gunzip = new GZIPInputStream(in);
(S*j9eL0i)^ NV%RU0     byte[] buffer = new byte[256];ITPUB个人空间I!x j b |NrX%}d
    int n;
9L3{|7aw2a5Mx0     while ((n = gunzip.read(buffer)) >= 0) {
tk9jGhyY9F P8S0       out.write(buffer, 0, n);
9^:fArGO~M;BI0     }
zFT~7Rz*n0     // toString()使用平台默认编码,也可以显式的指定如toString("GBK")ITPUB个人空间)L/c ?9@;yfWe
    return out.toString();ITPUB个人空间N]#QQ{-s
  }
0?Gvu5Q*B V*k[+E4^0
/I/@%r[ z-Cn0   // 测试方法
}qE\8z.u1N0   public static void main(String[] args) throws IOException {ITPUB个人空间l&h6N Tu A
    System.out.println(ZipUtil.uncompress(ZipUtil.compress("中国China")));ITPUB个人空间+SaO[-JHK
  }
pQj%KcD TF+_0 ITPUB个人空间Q2jpI|'_#rR x
}

TAG:

justforregister的个人空间 justforregister 发布于2008-05-01 20:18:22
nice job
greenflute greenflute 发布于2008-05-01 23:39:56

icelander发布于2008-05-04 09:36:13
Good
我来说两句

(可选)

日历

« 2008-10-16  
   1234
567891011
12131415161718
19202122232425
262728293031 

数据统计

  • 访问量: 12645
  • 日志数: 119
  • 建立时间: 2008-02-08
  • 更新时间: 2008-10-01

RSS订阅

Open Toolbar