1990 年代に Jean-loup Gailly によって書かれた ZLIB ライブラリを使用して圧縮されたデータを解凍しようとしています。これは人気のあるライブラリだと思います (使用する zlib32.dll ファイルを出荷する多くのプログラムを目にします)。私が読んだものから rfc-1951 DEFLATE 形式を使用する compress() 関数を直接使用しています。
これは、ストリームから圧縮データを読み取って解凍するために使用しているコードの一部です。
InputStream is = new ByteArrayInputStream(buf);
//GZIPInputStream gzis = new GZIPInputStream(is);
InflaterInputStream iis = new InflaterInputStream(is);
byte[] buf2 = new byte[uncompressedDataLength];
iis.read(buf2);
iis.read(buf2) 関数は、「データ形式エラー」の内部例外をスローします。GZIPInputStream も使用してみましたが、同じ例外がスローされます。
「buf」変数は byte[] 型であり、C プログラムが ZLIB compress() 関数から取得したものと同じであることをデバッグで確認しました (実際のデータは TCP 経由でサーバーから取得されます)。「uncompressedDataLength」は、C プログラム (サーバー) によっても提供された非圧縮データの既知のサイズです。
このライブラリを使用してデータの読み取り/書き込みを試みた後、Java を使用して Android で同じデータの読み取り/書き込みを試みた人はいますか?
いくつかの場所で参照されている「ZLIB の純粋な Java ポート」を見つけました。必要に応じてそれを試すこともできますが、可能であれば組み込み/OS 関数を使用したいと思います。