Question

Quelqu'un peut-il me dire comment décompresser un tableau d'octets?

Voici mon code. J'ai essayé pendant des siècles et il me donne un 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();
Était-ce utile?

La solution

Eh bien, une question précise est que vous êtes apparemment en utilisant InputStream.read sans vérifier la valeur de retour. Cela signifie que vous pouvez avoir lu moins de données que vous vous attendiez à.

En outre, vous essayez de gonfler dans unComp de le décalage, mais avec une longueur maximale étant la même que unComp.length. Cela signifie que si offset est autre chose que 0, vous pouvez essayer d'écrire après la fin du tableau.

Avez-vous dire le décalage de se référer à la entrée array? Je ne crois pas que ce soit ce que cela signifie. Vous devez utiliser setInput uniquement fournissent des données d'entrée.

Cependant, vous pouvez faire tout cela beaucoup plus facile pour vous-même à l'aide InflaterInputStream au lieu de la manipulation Inflate vous.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top