質問

誰かがバイト配列を減圧する方法を教えてもらえますか?

これが私のコードです。私は何年もの間それを試してきました、そしてそれは私に与えています DataFormatException.

byte bArray[] = new byte[tSizeOfTile];
input.read(bArray, offset, limit);

byte[] unComp = new byte[bArray.length + 100];

Inflater inflate = new Inflater();
inflate.setInput(bArray);
inflate.inflate(unComp, offset, bArray.length + 100);
inflate.end();
役に立ちましたか?

解決

まあ、1つの明確な問題は、あなたが明らかに使用していることです InputStream.read 返品値を確認せずに。つまり、予想よりも少ないデータを読み取った可能性があります。

また、あなたは膨張しようとしています unComp から オフセットですが、最大の長さは同じです unComp.length. 。それはifを意味します offset 0以外のものは、配列の終わりを過ぎて書こうとすることができます。

参照するオフセットを意味しましたか 入力 配列?それがそれが意味することだとは思わない。使用する必要があります setInputそれだけ 入力データを提供します。

ただし、使用することで、これらすべてを自分ではるかに簡単にすることができます InflaterInputStream 処理する代わりに Inflate あなた自身。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top