8

こんにちは、仲間の Java 開発者です。以下のようなヘッダーと本文の応答を受け取りましたが、以下のコードを使用して解凍しようとすると、次の例外で失敗します。

java.io.IOException: GZIP 形式ではありません

応答:

HTTP/1.1 200 OK
コンテンツ タイプ: テキスト/xml; 文字セット=utf-8
コンテンツ エンコーディング: gzip
サーバー: 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);
}

お知らせ下さい。

ありがとう、

プラディープ

4

3 に答える 3

2

MIME ヘッダーは GZIP 形式ではなく、プレーン テキストです。ストリームを解凍する前に、まずそれを読む必要があります。

また、これを使用しないのはなぜですか:

InputStream in = sock.getInputStream();
readHeader(in);
InputStream zin = new GZIPInputStream(in);
于 2013-05-17T01:42:08.900 に答える
0

私は二番目のbmarguilesの答えです。

本文( RFC 内)のみresponse-bodyが圧縮されているため、. の後の部分のみを解凍する必要があります\r\n\r\n

一般的に言えば、その二重の CRLF によって応答を半分にカットし、後半のみを解凍できます。

于 2016-01-10T18:58:45.123 に答える