¿Cómo leer datos de GZIPInputStream en Java?

La clase Java GZIPInputStream (java.util.zip.GZIPInputStream) se puede utilizar para descomprimir archivos comprimidos con el algoritmo de compresión GZIP, por ejemplo, a través de la clase GZIPOutputStream.

java.lang.Object
    java.io.InputStream
        java.io.FilterInputStream
            java.util.zip.InflaterInputStream
                java.util.zip.GZIPInputStream

Todas las interfaces implementadas:

Cerrable, Autocerrable

public class GZIPInputStream
extends InflaterInputStream

Esta clase implementa un filtro de flujo para leer datos comprimidos en formato de archivo GZIP.

Los constructores de esta clase son los siguientes:

  • GZIPInputStream(InputStream in): crea un nuevo flujo de entrada con un tamaño de búfer predeterminado.
  • GZIPInputStream(InputStream in, int size): crea un nuevo flujo de entrada con el tamaño de búfer especificado.

Nota: El método java.util.zip.GZIPInputStream.read(byte[] buf, int off, int len) lee datos sin comprimir en una array de bytes. Si len no es cero, el método se bloqueará hasta que se pueda descomprimir alguna entrada; de lo contrario, no se leen bytes y se devuelve 0.

Los métodos de esta clase son los siguientes :

Método 1: cerrar()

Cierra este flujo de entrada y libera cualquier recurso del sistema asociado con el flujo

Tipo de retorno: nulo 

Método 2: leer()

Lee datos sin comprimir en una array de bytes

Parámetros: 

  • array de bytes
  • apagado
  • longitud interna

Tipo de valor devuelto: entero 

Ahora pasemos a nuestro método excéntrico que se enumera a continuación de la siguiente manera:

Método 3: método GZIPInputStream.read(byte[] buf, int off, int len).

Parámetros:

  • byte[] buf
  • apagado
  • longitud interna

Sintaxis:

public int read()
throws IOException

Parámetros

  • El búfer en el que se leen los datos.
  • El desplazamiento de inicio en la array de destino b.
  • El número máximo de bytes leídos.

Tipo de valor devuelto: el número real de bytes leídos, o -1 si se llega al final de la transmisión.

Excepciones lanzadas:

  • NullPointerException: si buf (búfer) es nulo.
  • IndexOutOfBoundsException: si off es negativo, len es negativo o len es mayor que buf.length: off.
  • ZipException: si los datos de entrada comprimidos están corruptos.
  • IOException: si se ha producido un error de E/S.

Ejemplo

Java

// Java Program to Usage of GZIPInputStream
// via Showcasing Reading Data
 
// Importing required classes
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.Arrays;
import java.util.zip.DataFormatException;
import java.util.zip.GZIPInputStream;
import java.util.zip.GZIPOutputStream;
 
// Main class
// GZIPInputStreamDemo
public class GFG {
 
    // Main driver method
    public static void main(String[] args)
        throws DataFormatException, IOException
    {
        // Custom input string  
        String message = "Welcome to Geeksforgeeks;"
                         + "Welcome to Geeksforgeeks;"
                         + "Welcome to Geeksforgeeks;"
                         + "Welcome to Geeksforgeeks;"
                         + "Welcome to Geeksforgeeks;"
                         + "Welcome to Geeksforgeeks;"
                         + "Welcome to Geeksforgeeks;"
                         + "Welcome to Geeksforgeeks;"
                         + "Welcome to Geeksforgeeks;"
                         + "Welcome to Geeksforgeeks;";
 
        // Print and display the message
        System.out.println("Original Message length : "
                           + message.length());
       
        byte[] input = message.getBytes("UTF-8");
 
        // Compress the bytes
        ByteArrayOutputStream arrayOutputStream
            = new ByteArrayOutputStream();
        GZIPOutputStream outputStream
            = new GZIPOutputStream(arrayOutputStream);
        outputStream.write(input);
        outputStream.close();
 
        // Read and decompress the data
        byte[] readBuffer = new byte[5000];
        ByteArrayInputStream arrayInputStream
            = new ByteArrayInputStream(
                arrayOutputStream.toByteArray());
        GZIPInputStream inputStream
            = new GZIPInputStream(arrayInputStream);
        int read = inputStream.read(readBuffer, 0,
                                    readBuffer.length);
        inputStream.close();
        // Should hold the original (reconstructed) data
        byte[] result = Arrays.copyOf(readBuffer, read);
 
        // Decode the bytes into a String
        message = new String(result, "UTF-8");
 
        System.out.println("UnCompressed Message length : "
                           + message.length());
    }
}
Producción

Original Message length : 250
UnCompressed Message length : 250

Publicación traducida automáticamente

Artículo escrito por praveen13kulkarni y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *