2012-06-25 102 views
1

我想知道我應該在gzip編碼響應的情況下做什麼。這是處理我的迴應的方法:解壓縮GZIP

private InputStream getResultStream(Response response) throws IOException 
{ 
    InputStream resultStream = null; 
    if(response != null) 
    { 
     String encoding = response.getHeader("Content-Encoding"); 
     if((encoding != null) && (encoding.equalsIgnoreCase("gzip"))) 
     { 
      // What to do here ? 
      Log.d("Stream :", "Read GZIP"); 

     } else if ((encoding != null) && encoding.equalsIgnoreCase("deflate")) { 
      resultStream = new InflaterInputStream(response.getStream(), new Inflater(true)); 
      Log.d("Stream :", "Read Deflated."); 
     } else { 
      resultStream = response.getStream(); 
      Log.d("Stream :","Read Normal."); 
     }  
    } 

    return resultStream; 
} 

我該如何解決這個問題?

+0

看看這個鏈接http://stackoverflow.com/q/6717165/779408。在那裏表示壓縮和解壓縮方法。 – breceivemail

回答

0

免責聲明:我沒有有機會對此進行測試。

根據什麼Android’s HTTP Clients博客文章說,如果你在Android 2.3以上,然後HttpURLConnection可以自動爲你做。

2

將您的信息流包裝在GZIPInputStream中並從中讀取。

resultStream = new GZIPInputStream(resultStream); 
//proceed reading as usual 
0

如果你只是想知道如何讀gziped流,只是包裝你的InputStream與GZIPInputStream

InputStream is = ... 
GZIPInputStream zis = new GZIPInputStream(new BufferedInputStream(is)); 
try { 
    // Reading from 'zis' gets you the uncompressed bytes... 
    processStream(zis); 
} finally { 
    zis.close(); 
} 
0

執行以下操作:

resultStream = new java.util.zip.GZIPInputStream(response.getStream()); 
+0

試過它導致以下異常: 06-25 15:00:00 06.465:W/System.err(15873):java.io.IOException:流關閉 06-25 15:00:06.465:W/System .err(15873):\t at libcore.net.http.AbstractHttpInputStream.checkNotClosed(AbstractHttpInputStream.java:68) 06-25 15:00:06.465:W/System.err(15873):\t at libcore.net.http .FixedLengthInputStream.read(FixedLengthInputStream.java:41) – CodePrimate