java.util.zip.ZipException: causas y soluciones para excepciones de formato No en GZIP

Java Util Zip Zipexception

Pregunta: en uso Compresión y descompresión GZIP Puede producirse una excepción java.util.zip.ZipException: no en la excepción de formato GZIP.

Causa: cuando se usa GZIP para la compresión, cuando se crea un objeto GZIPOutputStream, se llama a un método writeHeader, que escribe la información del encabezado GZIP en el flujo de salida. el código se muestra a continuación:



|_+_|

Los primeros dos bytes de la información del encabezado se utilizan para almacenar el número mágico. El valor de GZIP_MAGIC es 35615, el primer byte almacena el bit bajo y el segundo byte almacena el bit alto. Cuando se descomprime, GZIPInputStream llamará a readheader para leer la información del encabezado. el código se muestra a continuación:



|_+_|

GZIPInputStream primero lee los dos primeros bytes a través de readUShort y los compara con el número mágico. Si lo mismo indica que la matriz de bytes actual es una matriz de bytes de formato GZIP, si no es el mismo, significa que la matriz de bytes actual no es una matriz de formato GZIP. La excepción java.util.zip.ZipException: no en formato GZIP.



Conclusión: al usar GZIP para compresión y descompresión, si está comprimido Cambios en la matriz de bytes durante la transmisión Esto hará que se produzca esta excepción, por lo que si no está transfiriendo directamente la matriz de bytes comprimida sino una cadena, debe usar una codificación de un solo byte como ISO-8859-1 al convertir a una cadena; de lo contrario, la conversión de una cadena a una matriz de bytes hace que la matriz de sección cambie, lo que provoca la excepción.