解压缩一个gzip压缩响应

时间:2013-05-17 01:32:09

标签: java gzip

Hello java开发人员。我收到带有标题和正文的响应,如下所示,但是当我尝试使用下面的代码解压缩它时,它会因此异常而失败:

java.io.IOException: Not in GZIP format

响应:

HTTP/1.1 200 OK
Content-Type: text/xml; charset=utf-8
Content-Encoding: gzip
Server: Jetty(6.1.x)
▼       ═UMs¢0►=7┐ép?╙6-C╚$╢gΩ↓╟±╪₧∟zS╨╓╓♦$FÆ╒÷▀G┬╚╞8N≤╤Cf°►╦█╖╗o↨æJÄ+`:↓2
♣»└√S▬L&?∙┬_)U╔|♣%ûíyk_à\,æ] hⁿ?▀xΓ∟o╜4♫ù\#MAHG?┤(Q¶╞⌡▌Ç?▼ô[7Fí¼↔φ☻I%╓╣Z♂?¿↨F;x|♦o/A╬♣╘≡∞─≤╝╘U∙♥0☺æ?|J%à{(éUmHµ %σl┴▼Ç9♣┌Ç?♫╡5╠yë~├╜♦íi♫╥╧
╬û?▓ε?╞┼→RtGqè₧ójWë♫╩∞j05├╞┘|>┘º∙↑j╪2┐|= ÷²
eY\╛P?#5wÑqc╙τ♦▓½Θt£6q∩?┌4┼t♠↕=7æƒ╙?╟|♂;║)∩÷≈═^╛{v⌂┌∞◄>6ä╝|

代码:

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);
}

请告知。

谢谢,

与Pradeep

3 个答案:

答案 0 :(得分:2)

MIME标头不是GZIP格式,而是纯文本格式。在解压缩流之前,必须首先阅读它。

另外,为什么不使用它:

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

答案 1 :(得分:1)

所有这些都有库。例如,您可以使用Apache HTTP Components,或者您可以阅读其开源信息以查看其功能。至少,请阅读the relevant specification.

答案 2 :(得分:0)

我是第二个bmarguiles'答案。

仅压缩正文(RFC中的response-body),因此您只需要解压缩\r\n\r\n之后的部分。

一般来说,你可以通过双重CRLF将响应减少一半,并且只对下半部分进行解压缩。