你们中任何一个人都可以解决这个问题!
问题描述:
我收到了来自http web-server的内容编码:gzip标头。 现在我想解码内容,但是当我使用jdk 1.6.12中的GZIP类时,它会给出null。
是否意味着内容不是gzip格式?或者是否有其他类用于解压缩http响应内容?
System.out.println("Reading InputStream");
InputStream in = httpuc.getInputStream();// httpuc is an object of httpurlconnection<br>
System.out.println("Before reading GZIP inputstream");
System.out.println(in);
GZIPInputStream gin = new GZIPInputStream(in));
System.out.println("After reading GZIP inputstream");
Reading InputStream
Before reading GZIP inputstream
sun.net.www.protocol.http.HttpURLConnection$HttpInputStream@8acf6e
null
我在代码中发现了一个错误,但无法正确理解它。它表明了什么。
错误! java.io.EOFException的
由于
答案 0 :(得分:4)
我认为你应该看看HTTPClient,它将为你处理很多HTTP问题。特别是,它允许访问可能被gzip压缩的响应 body ,然后您只需通过GZIPInputStream提供它
e.g。
Header hce = postMethod.getResponseHeader("Content-Encoding");
InputStream in = null;
if(null != hce)
{
if(hce.getValue().equals(GZIP)) {
in = new GZIPInputStream(postMethod.getResponseBodyAsStream());
}
// etc...
答案 1 :(得分:1)
我是布莱恩的第二个建议。每当您需要处理通过HTTP获取/发布内容时,请不要使用Apache HTTP客户端进行低级访问。
答案 2 :(得分:1)
InputStream is = con.getInputStream();
InputStream bodyStream = new GZIPInputStream(is);
ByteArrayOutputStream outStream = new ByteArrayOutputStream();
byte[] buffer = new byte[4096];
int length;
while ((length = bodyStream.read(buffer)) > 0) {
outStream.write(buffer, 0, length);
}
String body = new String(outStream.toByteArray(), "UTF-8");