我在我的服务器上运行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,我可以不将响应放在流中吗?我打算使用流并在之后解压缩它吗?
我做错了什么?
答案 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