大家好。我收到了如下所示的带有标题和正文的响应,但是当我尝试使用下面的代码解压它时,它失败了,出现了以下异常:
<>之前java.io.IOException: Not in GZIP format之前反应:
<>之前Http/1.1 200 ok的content - type: text/xml;utf - 8字符集=内容编码:gzip服务器:码头(6.1.x)▼═口头语¢0►= 7┐ep ?╙6 c╚美元╢gΩ↓╟±╪₧∟z╨╓╓♦$ FÆ╒÷▀g┬╚╞8 n≤╤Cf°►╦█╖╗o↨æJA +":↓2♣»└√年代▬l ?∙┬_)U╔|♣% uiyk_a ,æ)hⁿ?▀xΓ∟o╜4♫U # MAHG ?┤(Q¶╞⌡▌C ?▼o [7 fi¼↔φ☻我%╓╣Z♂?害怕↨F; x |♦o/A╬♣╘≡∞─≤╝╘U∙♥0☺æ吗?| J % {(eUmHµl %σ┴▼C9♣┌C ?你们~♫╡5╠├╜♦ii♫╥╧╬u ?▓ε?╞┼→RtGqe₧ojWe♫╩∞j05├╞┘|>┘º∙↑j╪2┐| =÷²嗯╛P ? # 5 wnqc╙τ♦▓½Θt£6问∩?┌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
MIME报头不是GZIP格式,而是纯文本。在解压缩流之前,必须先读取它。
还有,为什么不直接用这个呢:
InputStream in = sock.getInputStream();
readHeader(in);
InputStream zin = new GZIPInputStream(in);
所有这些都有库。例如,您可以使用Apache HTTP组件,或者您可以阅读其开放源代码以了解它的功能。至少,阅读相关的规范。
我再看一下marguiles的回答。
只有主体 (RFC中的response-body
)被压缩,所以您只需要解压rnrn
之后的部分。
一般来说,您可以通过双CRLF将响应减半,并且只解压后一半。