質問
誰かがバイト配列を減圧する方法を教えてもらえますか?
これが私のコードです。私は何年もの間それを試してきました、そしてそれは私に与えています 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
あなた自身。
所属していません StackOverflow