我在我的服务器上运行 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,我可以不将响应放入流中吗?我是否打算使用该流并在之后解压缩它?
我做错了什么?
最佳答案
而不是使用
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
关于java - Android/Java 中使用 GZip 编码的 HttpGet,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22223396/