Comprimir y descomprimir archivos en Java

Las clases DeflaterOutputStream e InflaterInputStream se proporcionan en Java para comprimir y descomprimir el contenido del archivo. Estas clases proporcionan métodos útiles que se pueden usar para comprimir el contenido del archivo.

Comprimir un archivo usando DeflaterOutputStream

Esta clase implementa un filtro de flujo de salida para comprimir datos en el formato de compresión «desinflado». También se utiliza como base para otros tipos de filtros de compresión, como GZIPOutputStream.

Métodos importantes:

  • void close() :  escribe los datos comprimidos restantes en el flujo de salida y cierra el flujo subyacente.
  • protected void deflate() : escribe el siguiente bloque de datos comprimidos en el flujo de salida.
  • void finish() :  Termina de escribir datos comprimidos en el flujo de salida sin cerrar el flujo subyacente.
  • void flush() : vacía  el flujo de salida comprimido.
  • void write(byte[] b, int off, int len) : escribe una array de bytes en el flujo de salida comprimido, donde off es el desplazamiento inicial de los datos y len es el número total de bytes.
  • void write(int b) : Escribe un byte en el flujo de salida comprimido.

Pasos para comprimir un archivo (archivo 1)

  • Lleve un archivo de entrada ‘archivo 1’ a FileInputStream para leer datos.
  • Tome el archivo de salida ‘file 2’ y asígnelo a FileOutputStream . Esto ayudará a escribir datos en ‘file2’.
  • Asigne FileOutputStream a DeflaterOutputStream para comprimir los datos.
  • Ahora, lea los datos de FileInputStream y escríbalos en DeflaterOutputStream. Comprimirá los datos y los enviará a FileOutputStream, que almacena los datos comprimidos en el archivo de salida.
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.Deflater;
import java.util.zip.DeflaterOutputStream;
  
class zip
{
    public static void main(String[] args) throws IOException {
        //Assign the original file : file to
        //FileInputStream for reading data
        FileInputStream fis=new FileInputStream("file1");
  
        //Assign compressed file:file2 to FileOutputStream
        FileOutputStream fos=new FileOutputStream("file2");
  
        //Assign FileOutputStream to DeflaterOutputStream
        DeflaterOutputStream dos=new DeflaterOutputStream(fos);
  
        //read data from FileInputStream and write it into DeflaterOutputStream
        int data;
        while ((data=fis.read())!=-1)
        {
            dos.write(data);
        }
  
        //close the file
        fis.close();
        dos.close();
    }
}

Descomprimir un archivo usando InflaterInputStream

Esta clase implementa un filtro de flujo para descomprimir datos en el formato de compresión «desinflado». También se utiliza como base para otros filtros de descompresión, como GZIPInputStream.

Métodos importantes:

  • int available() :  Devuelve 0 después de alcanzar el EOF; de lo contrario, siempre devuelve 1.
  • void close() :  Cierra el flujo de entrada y libera cualquier recurso del sistema asociado con el flujo.
  • protected void fill() :  Llena el búfer de entrada con más datos para descomprimir.
  • void mark(int readlimit) :  Marca la posición actual en el flujo de entrada.
  • boolean markSupported() : comprueba  si el flujo de entrada es compatible con los métodos de marcar y restablecer.
  • int read() :  Lee un byte de datos sin comprimir.
  • int read(byte[] b, int off, int len) :  lee datos descomprimidos en una array de bytes en el flujo de salida comprimido, donde off es el desplazamiento inicial de los datos y len es el número total de bytes.
  • void reset() :  Reposiciona este flujo a la posición en el momento en que se llamó por última vez al método de marca en este flujo de entrada.

Pasos para descomprimir un archivo

  • El archivo con el nombre ‘file2’ ahora contiene datos comprimidos y necesitamos obtener datos descomprimidos originales de este archivo.
  • Asigne el archivo comprimido ‘file2’ a FileInputStream. Esto ayuda a leer datos de ‘file2’.
  • Asigne el archivo de salida ‘file3’ a FileOutputStream. Esto ayudará a escribir datos sin comprimir en ‘file3’.
  • Ahora, lea los datos sin comprimir de InflaterInputStream y escríbalos en FileOutputStream. Esto escribirá los datos sin comprimir en ‘file3’.
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.InflaterInputStream;
  
//Uncompressing a file using an InflaterInputStream
class unzip
{
    public static void main(String[] args) throws IOException {
        //assign Input File : file2 to FileInputStream for reading data
        FileInputStream fis=new FileInputStream("file2");
  
        //assign output file: file3 to FileOutputStream for reading the data
        FileOutputStream fos=new FileOutputStream("file3");
          
        //assign inflaterInputStream to FileInputStream for uncompressing the data
        InflaterInputStream iis=new InflaterInputStream(fis);
          
        //read data from inflaterInputStream and write it into FileOutputStream 
        int data;
        while((data=iis.read())!=-1)
        {
            fos.write(data);
        }
          
        //close the files
        fos.close();
        iis.close();
          
    }
}

Este artículo es una contribución de Nishant Sharma . Si le gusta GeeksforGeeks y le gustaría contribuir, también puede escribir un artículo usando contribuya.geeksforgeeks.org o envíe su artículo por correo a contribuya@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.

Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 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 *