logo

Compressione e decompressione di file in Java

Le classi DeflaterOutputStream e InflaterInputStream sono fornite in Java per comprimere e decomprimere il contenuto del file. Queste classi forniscono metodi utili che possono essere utilizzati per comprimere il contenuto del file.

Compressione di un file utilizzando DeflaterOutputStream

Questa classe implementa un filtro del flusso di output per comprimere i dati nel formato di compressione "deflate". Viene utilizzato anche come base per altri tipi di filtri di compressione come GZIPOutputStream. Metodi importanti:
    vuoto vicino() : Scrive i dati compressi rimanenti nel flusso di output e chiude il flusso sottostante. sgonfiaggio vuoto protetto() :Scrive il blocco successivo di dati compressi nel flusso di output. finitura vuota() : Termina la scrittura dei dati compressi nel flusso di output senza chiudere il flusso sottostante. svuotamento vuoto() : Svuota il flusso di output compresso. void write(byte[] b int off int len) :Scrive un array di byte nel flusso di output compresso dove off è l'offset iniziale dei dati e len è il numero totale di byte. void write(int b):Scrive un byte nel flusso di output compresso.
Passaggi per comprimere un file (file 1)
  • Prendi un file di input "file 1" su FileInputStream per leggere i dati.
  • Prendi il file di output "file 2" e assegnalo a FileOutputStream . Ciò aiuterà a scrivere i dati in "file2".
  • Assegna FileOutputStream a DeflaterOutputStream per la compressione dei dati.
  • Ora leggi i dati da FileInputStream e scrivili in DeflaterOutputStream. Comprimerà i dati e li invierà a FileOutputStream che memorizza i dati compressi nel file di output.
Java
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();  } } 

Decompressione di un file utilizzando InflaterInputStream

Questa classe implementa un filtro del flusso per decomprimere i dati nel formato di compressione "deflate". Viene anche utilizzato come base per altri filtri di decompressione come GZIPInputStream. Metodi importanti:
    int disponibile() : Restituisce 0 dopo che è stato raggiunto EOF altrimenti restituisce sempre 1. vuoto vicino() : Chiude il flusso di input e rilascia tutte le risorse di sistema associate al flusso. riempimento vuoto protetto() : Riempie il buffer di input con più dati da decomprimere. void mark(int readlimit): Contrassegna la posizione corrente nel flusso di input. booleano markSupported() : Verifica se il flusso di input supporta i metodi mark e reset. int leggi() : Legge un byte di dati non compressi. int read(byte[] b int off int len) : Legge i dati decompressi in un array di byte nel flusso di output compresso dove off è l'offset iniziale dei dati e len è il numero totale di byte. ripristino nullo() : Riposiziona questo flusso nella posizione nel momento in cui il metodo mark è stato chiamato l'ultima volta su questo flusso di input.
Passaggi per decomprimere un file
  • Il file con il nome "file2" ora contiene dati compressi e dobbiamo ottenere i dati decompressi originali da questo file.
  • Assegna il file compresso "file2" a FileInputStream. Questo aiuta a leggere i dati da "file2".
  • Assegna il file di output "file3" a FileOutputStream. Ciò aiuterà a scrivere i dati non compressi in "file3".
  • Ora leggi i dati non compressi da InflaterInputStream e scrivili in FileOutputStream. Questo scriverà i dati non compressi in "file3".
Java
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();    } } 
  Crea quiz