字符串的压缩和解压缩

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

1、使用ISO-8859-1作为中介编码,可以保证准确还原数据
2、字符编码确定时,可以在uncompress方法最后一句中显式指定编码
import  java.io.ByteArrayInputStream;
import  java.io.ByteArrayOutputStream;
import  java.io.IOException;
import  java.util.zip.GZIPInputStream;
import  java.util.zip.GZIPOutputStream;

//  将一个字符串按照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();
  }

  
//  测试方法
   public   static   void  main(String[] args)  throws  IOException {
    System.out.println(ZipUtil.uncompress(ZipUtil.compress(
" 中国China " )));
  }

}

你可能感兴趣的:(字符串的压缩和解压缩)