Comment décompresser un octet tableau en Java
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();
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.