1

バイト配列を解凍する方法を教えてもらえますか?

これが私のコードです。私は何年もの間それを試してきました、そしてそれは私にを与えてい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();
4

1 に答える 1

5

確かな問題の1つはInputStream.read、戻り値をチェックせずに使用しているように見えることです。つまり、予想よりも少ないデータを読み取った可能性があります。

unComp また、オフセットから膨らませようとしていますが、最大長はと同じunComp.lengthです。つまりoffset、が0以外の場合は、配列の終わりを超えて書き込もうとしている可能性があります。

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

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

于 2010-08-16T10:40:36.090 に答える