Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 解压缩gzip http响应_Java_Gzip - Fatal编程技术网

Java 解压缩gzip http响应

Java 解压缩gzip http响应,java,gzip,Java,Gzip,各位java开发人员好。我收到一个标题和正文如下的响应,但当我尝试使用下面的代码解压缩它时,它失败了,出现了以下异常: java.io.IOException: Not in GZIP format 请告知 谢谢 PradeepMIME头不是GZIP格式,而是纯文本。在解压流之前,必须先阅读这些内容 还有,为什么不直接使用这个: InputStream in = sock.getInputStream(); readHeader(in); InputStream zin = new GZIPIn

各位java开发人员好。我收到一个标题和正文如下的响应,但当我尝试使用下面的代码解压缩它时,它失败了,出现了以下异常:

java.io.IOException: Not in GZIP format 请告知

谢谢


Pradeep

MIME头不是GZIP格式,而是纯文本。在解压流之前,必须先阅读这些内容

还有,为什么不直接使用这个:

InputStream in = sock.getInputStream();
readHeader(in);
InputStream zin = new GZIPInputStream(in);

所有这些都有图书馆。例如,您可以使用它,也可以阅读它的开源代码来了解它的功能。至少,读一读我的第二个B辩论的答案

只有正文(RFC中的响应正文)被压缩,因此您只需要解压缩
\r\n\r\n
之后的部分


一般来说,你可以用这两个CRLF将响应减半,只对后半部分进行解压缩。

你能告诉我你读标题是什么意思吗?我的意思是,当你得到一个文件时,你会得到一个标题,上面写着“Content-type:text/html”,其中包含纯文本格式的元数据。每个元数据元素由一个换行符分隔,整个头以两个换行符结束,然后数据开始。什么是袜子?如果它是一个套接字,那么您应该知道头和其他一些东西不是gzip的。只有响应主体是。
byte[] b=  IOUtils.toByteArray(sock.getInputStream());

ByteArrayInputStream bais = new ByteArrayInputStream(b);
GZIPInputStream gzis = new GZIPInputStream(bais);
InputStreamReader reader = new InputStreamReader(gzis);
BufferedReader in = new BufferedReader(reader);

String readed;
while ((readed = in.readLine()) != null) {
    System.out.println("read:  "+readed);
}
InputStream in = sock.getInputStream();
readHeader(in);
InputStream zin = new GZIPInputStream(in);