Cómo descomprimir una matriz de bytes en Java
Pregunta
¿Alguien puede decirme cómo descomprimir un conjunto de bytes?
Aquí está mi código. He estado tratando durante años y me está dando una 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();
Solución
Bueno, una cuestión definitiva es que se está utilizando InputStream.read
aparentemente sin comprobar el valor de retorno. Eso significa que puede haber leído menos datos de los que esperaba.
También, que está tratando de inflar en unComp
de el desplazamiento, pero con una longitud máxima es el mismo que unComp.length
. Esto significa que si offset
es otra cosa que no sea 0, usted podría estar tratando de escribir más allá del final de la matriz.
Quizás quiso decir el desplazamiento para referirse a la entrada array? No creo que eso es lo que significa. Debe utilizar setInput
a solamente proporcionan datos de entrada.
Sin embargo, usted podría hacer todo esto mucho más fácil para usted mismo usando InflaterInputStream
vez de manejar Inflate
mismo.