Android Java 字符串的压缩和解压缩

最近在做android开发,socket要传报文信息,报文信息是有json格式,数据的重复度很高所以就找了一个压缩字符串的方法,数据越大压缩越明显。

数据传输时,有时需要将数据压缩和解压缩,本例使用GZIPOutputStream/GZIPInputStream实现。

1、使用ISO-8859-1作为中介编码,可以保证准确还原数据
2、字符编码确定时,可以在uncompress方法最后一句中显式指定编码

  1. importjava.io.ByteArrayInputStream;
  2. importjava.io.ByteArrayOutputStream;
  3. importjava.io.IOException;
  4. importjava.util.zip.GZIPInputStream;
  5. importjava.util.zip.GZIPOutputStream;
  6. publicclassZipUtil{
  7. //压缩
  8. publicstaticStringcompress(Stringstr)throwsIOException{
  9. if(str==null||str.length()==0){
  10. returnstr;
  11. }
  12. ByteArrayOutputStreamout=newByteArrayOutputStream();
  13. GZIPOutputStreamgzip=newGZIPOutputStream(out);
  14. gzip.write(str.getBytes());
  15. gzip.close();
  16. returnout.toString("ISO-8859-1");
  17. }
  18. //解压缩
  19. publicstaticStringuncompress(Stringstr)throwsIOException{
  20. if(str==null||str.length()==0){
  21. returnstr;
  22. }
  23. ByteArrayOutputStreamout=newByteArrayOutputStream();
  24. ByteArrayInputStreamin=newByteArrayInputStream(str
  25. .getBytes("ISO-8859-1"));
  26. GZIPInputStreamgunzip=newGZIPInputStream(in);
  27. byte[]buffer=newbyte[256];
  28. intn;
  29. while((n=gunzip.read(buffer))>=0){
  30. out.write(buffer,0,n);
  31. }
  32. //toString()使用平台默认编码,也可以显式的指定如toString("GBK")
  33. returnout.toString();
  34. }
  35. //测试方法
  36. publicstaticvoidmain(String[]args)throwsIOException{
  37. Stringtemp="l;jsafljsdoeiuoksjdfpwrp3oiruewoifrjewflk我的得到喀喀喀看看看safljsdoeiuoksjdfpwrp3oiruewoifrjewflk我的得到喀喀喀看看看看safljsdoeiuoksjdfpwrp3oiruewoifrjewflk我的得到喀喀喀看看看看safljsdoeiuoksjdfpwrp3oiruewoifrjewflk我的得到喀喀喀看看看看safljsdoeiuoksjdfpwrp3oiruewoifrjewflk我的得到喀喀喀看看看看safljsdoeiuoksjdfpwrp3oiruewoifrjewflk我的得到喀喀喀看看看看safljsdoeiuoksjdfpwrp3oiruewoifrjewflk我的得到喀喀喀看看看看safljsdoeiuoksjdfpwrp3oiruewoifrjewflk我的得到喀喀喀看看看看safljsdoeiuoksjdfpwrp3oiruewoifrjewflk我的得到喀喀喀看看看看safljsdoeiuoksjdfpwrp3oiruewoifrjewflk我的得到喀喀喀看看看看safljsdoeiuoksjdfpwrp3oiruewoifrjewflk我的得到喀喀喀看看看看safljsdoeiuoksjdfpwrp3oiruewoifrjewflk我的得到喀喀喀看看看看safljsdoeiuoksjdfpwrp3oiruewoifrjewflk我的得到喀喀喀看看看看看看看看";
  38. System.out.println("原字符串="+temp);
  39. System.out.println("原长="+temp.length());
  40. Stringtemp1=ZipUtil.compress(temp);
  41. System.out.println("压缩后的字符串="+temp1);
  42. System.out.println("压缩后的长="+temp1.length());
  43. System.out.println("解压后的字符串="+ZipUtil.uncompress(temp1));
  44. }
  45. }

你可能感兴趣的:(android)