天天看点

Android 解析gzip格式数据

启用GZIP:

启用GZIP通信需要服务器和客户端双方的支持。

在客户端方面,进行HTTP请求时,要在HTTP的header处添加:

[plain]  view plain copy

  1. Accept-Encoding: gzip,deflate  

如果服务器支持,则在返回数据包的header中会包含:

[plain]  view plain copy

  1. Accept-Encoding: gzip,deflate  

解压GZIP:

下面将使用代码的方式表示解压GZIP的方法,下面这个函数使用了get方法获取网络上的数据,获取后使用GZIPinputStream类对GZIP数据进行了解压。并返回了得到的字符串:

[java]  view plain copy

  1. public String get(String url){  
  2.     HttpGet get=new HttpGet(url);  
  3.     HttpClient client=new DefaultHttpClient();  
  4.     get.addHeader("accept-encoding","gzip, deflate");  
  5.     //在包头中添加gzip格式  
  6.     HttpResponse response=null;  
  7.     ByteArrayBuffer bt= new ByteArrayBuffer(4096);  
  8.     String resultString="";  
  9.     try{  
  10.         response=client.execute(get);  
  11.         //执行Get方法     
  12.         HttpEntity he = response.getEntity();  
  13.         //以下是解压缩的过程  
  14.         GZIPInputStream gis = new GZIPInputStream(he.getContent());  
  15.         int l;  
  16.         byte[] tmp = new byte[4096];  
  17.         while ((l=gis.read(tmp))!=-1){  
  18.             bt.append(tmp, 0, l);  
  19.         }  
  20.         resultString = new String(bt.toByteArray(),"utf-8");   
  21.         //后面的参数换成网站的编码一般来说都是UTF-8  
  22.     }  
  23.     catch(Exception e)  
  24.     {  
  25.         Log.i("ERR",e.toString()); //抛出处理中的异常  
  26.     }  
  27.     return resultString;  
  28. }