logo

Comprimarea și decomprimarea fișierelor în Java

Clasele DeflaterOutputStream și InflaterInputStream  sunt furnizate în Java pentru a comprima și decomprima conținutul fișierului. Aceste clase oferă metode utile care pot fi folosite pentru comprimarea conținutului fișierului.

Comprimarea unui fișier folosind DeflaterOutputStream

Această clasă implementează un filtru de flux de ieșire pentru comprimarea datelor în formatul de compresie „deflate”. De asemenea, este folosit ca bază pentru alte tipuri de filtre de compresie, cum ar fi GZIPOutputStream. Metode importante:
    void close() : Scrie datele comprimate rămase în fluxul de ieșire și închide fluxul de bază. gol protejat deflate() :Scrie următorul bloc de date comprimate în fluxul de ieșire. void finish() : Termină scrierea datelor comprimate în fluxul de ieșire fără a închide fluxul de bază. Șterge fluxul de ieșire comprimat. void write(byte[] b int off int len): void write(int b):Scrie un octet în fluxul de ieșire comprimat.
Pași pentru comprimarea unui fișier (fișier 1)
  • Luați un fișier de intrare „fișier 1” la FileInputStream pentru a citi datele.
  • Luați fișierul de ieșire „fișierul 2” și atribuiți-l la FileOutputStream. Acest lucru va ajuta la scrierea datelor în „fișier2”.
  • Atribuiți FileOutputStream lui DeflaterOutputStream pentru comprimarea datelor.
  • Acum citiți datele din FileInputStream și scrieți-le în DeflaterOutputStream. Acesta va comprima datele și le va trimite către FileOutputStream, care stochează datele comprimate în fișierul de ieșire.
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();  } } 

Decomprimarea unui fișier folosind InflaterInputStream

Această clasă implementează un filtru de flux pentru decomprimarea datelor în formatul de compresie „deflate”. De asemenea, este folosit ca bază pentru alte filtre de decompresie, cum ar fi GZIPInputStream.
    int disponibil() : Returnează 0 după ce EOF a fost atins, altfel returnează întotdeauna 1. void close() : Închide fluxul de intrare și eliberează orice resurse de sistem asociate fluxului. umplere goală protejată() : Umple tamponul de intrare cu mai multe date de decomprimat. marcare nulă (int readlimit): Marchează poziția curentă în fluxul de intrare. marca booleanSupported() :  int read(): Citește un octet de date necomprimate. int read(byte[] b int off int len): Citește datele decomprimate într-o matrice de octeți în fluxul de ieșire comprimat, unde off este decalajul de început al datelor și len este numărul total de octeți. void reset(): 
Pași pentru decomprimarea unui fișier
  • Fișierul cu numele „fișier2” conține acum date comprimate și trebuie să obținem date originale decomprimate din acest fișier.
  • Assign the compressed file ‘file2’ to FileInputStream. Acest lucru ajută la citirea datelor din „fișier2”.
  • Atribuiți fișierul de ieșire „file3” la FileOutputStream. Acest lucru va ajuta la scrierea datelor necomprimate în „fișier3”.
  • Acum citiți datele necomprimate din InflaterInputStream și scrieți-le în FileOutputStream. Aceasta va scrie datele necomprimate în „fișier3”.
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ți un test