使用GZip编码的Android / Java中的HttpGet

时间:2014-03-06 11:38:44

标签: java gzip http-get

我在我的服务器上运行MVC 4并为我的用户保存一些数据我想我会启用GZip编码,为此我只是使用:

(C#)

Response.AddHeader("Content-Encoding", "gzip"); 
Response.Filter = new GZipStream(Response.Filter, CompressionMode.Compress);

在我的Android应用程序中,我使用:

(Java)

String response = "";
DefaultHttpClient client = new DefaultHttpClient();
HttpGet httpGet = new HttpGet(url);
try {
    HttpResponse execute = client.execute(httpGet);
    InputStream content = execute.getEntity().getContent();

    BufferedReader buffer = new BufferedReader(
        new InputStreamReader(content));
    String s = "";
    while ((s = buffer.readLine()) != null) {
        response += s;
    }

} catch (Exception e) {
    e.printStackTrace();
}
return response;

当我使用GZip时,Java代码坚固并导致GC运行,我从来没有耐心等待它返回。

当我从服务器上取下GZip时,它运行得非常好。获得响应的函数可以立即返回,没有任何问题。

我尝试将其添加到java代码中:

httpGet.addHeader("Accept-Encoding", "gzip");

没有成功。

问题是,有什么我没有得到的吗?如果使用GZip,我可以不将响应放在流中吗?我打算使用流并在之后解压缩它吗?

我做错了什么?

1 个答案:

答案 0 :(得分:2)

而不是使用

DefaultHttpClient client = new DefaultHttpClient();

你可以使用

ContentEncodingHttpClient client = new ContentEncodingHttpClient();

DefaultHttpClient的子类,支持GZIP内容。 你需要Apache HttpClient 4.1。

如果你有Apache HttpClient 4.2,你应该使用

DecompressingHttpClient client = new DecompressingHttpClient();

如果你有Apache HttpClient 4.3,你应该使用HttpClientBuilder