0

サーバーから圧縮データを取得しようとしています。サーバーをプログラムした人は、iPhone で ZLIB ライブラリを使用し、サーバーで gzcompress を使用していると私に言いました。そのデータを取得する適切な方法を見つけようとしていましたが、GZIPInputStream オブジェクトの作成中に「java.io.IOException: 不明な形式 (マジック番号 9c78)」という情報が表示されます。最後に、データを文字列として持っているポイントに到達しました。圧縮されていたので、その回答を使用して解凍しました: https://stackoverflow.com/a/6963668/419308。しかし、そのコードは機能しません。「in.read()」は最初に-1を返します。

なぜ -1 があるのか​​ 誰にも分かりますか?または、圧縮データを取得するためのより良い方法でしょうか?

編集: プロジェクトにファイルを追加して、そのファイルから読み取ろうとしました。in.read() が -1 を返さなかった

EDIT2: jJの答えによると、私はこのコードを試しました:

HttpGet request = new HttpGet( urlTeam );
HttpResponse response = new DefaultHttpClient().execute( request );
HttpEntity entity = response.getEntity();

InputStream stream = AndroidHttpClient.getUngzippedContent( entity );

InputStreamReader reader = new InputStreamReader( stream );
BufferedReader buffer = new BufferedReader( reader );

StringBuilder sb = new StringBuilder();
sb.delete( 0, sb.length() );
String input;
while ( ( input = buffer.readLine() ) != null )
{
     sb.append( input );
}

しかし、答えはまだ圧縮されています (または読み取れません)。

4

1 に答える 1

0

Androidでは、GingerBread から解凍 (および HTTP エンコード ヘッダー) を処理するHttpURLConnectionを使用するか、getUngzippedContent や modifyRequestToAcceptGzipResponse などのヘルパー メソッドを持つAndroidHttpClient (古い Android バージョンの場合) を使用する必要があります。

これはAndroid HTTP クライアントの良い要約です

于 2012-05-17T09:58:51.143 に答える