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
答案 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将响应减少一半,并且只对下半部分进行解压缩。