2012-06-25 223 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