logo

Kompresia a dekompresia súborov v jazyku Java

Triedy DeflaterOutputStream a InflaterInputStream  sú poskytované v jazyku Java na kompresiu a dekomprimáciu obsahu súboru. Tieto triedy poskytujú užitočné metódy, ktoré možno použiť na kompresiu obsahu súboru.

Komprimovanie súboru pomocou DeflaterOutputStream

Táto trieda implementuje filter výstupného toku na kompresiu údajov v kompresnom formáte „deflate“. Používa sa aj ako základ pre iné typy kompresných filtrov, ako je GZIPOutputStream. Dôležité metódy:
    void close() : Zapíše zostávajúce komprimované údaje do výstupného toku a zatvorí základný tok. chránená void deflate() :Zapíše ďalší blok komprimovaných údajov do výstupného toku. void finish() : Dokončí zápis komprimovaných údajov do výstupného toku bez zatvorenia základného toku. void flush() : Prepláchne komprimovaný výstupný tok. void write(byte[] b int off int len) :Zapíše pole bajtov do komprimovaného výstupného toku, kde off je počiatočný posun údajov a dĺžka je celkový počet bajtov. void write (int b):Zapíše bajt do komprimovaného výstupného toku.
Kroky na kompresiu súboru (súbor 1)
  • Vezmite vstupný súbor „súbor 1“ do FileInputStream na čítanie údajov.
  • Vezmite výstupný súbor „súbor 2“ a priraďte ho k FileOutputStream . Pomôže to zapisovať údaje do súboru „file2“.
  • Priraďte FileOutputStream k DeflaterOutputStream na kompresiu údajov.
  • Teraz si prečítajte údaje z FileInputStream a zapíšte ich do DeflaterOutputStream. Skomprimuje údaje a odošle ich do FileOutputStream, ktorý uloží komprimované údaje do výstupného súboru.
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();  } } 

Dekomprimácia súboru pomocou InflaterInputStream

Táto trieda implementuje prúdový filter na dekomprimovanie údajov v kompresnom formáte „deflate“. Používa sa tiež ako základ pre ďalšie dekompresné filtre, ako je GZIPInputStream. Dôležité metódy:
    int dostupné() : Vráti 0 po dosiahnutí EOF, inak vždy vráti 1. void close() : Zatvorí vstupný tok a uvoľní všetky systémové prostriedky priradené k toku. chránená void fill() : Naplní vstupnú vyrovnávaciu pamäť ďalšími údajmi na dekomprimovanie. void mark (int readlimit) : Označuje aktuálnu pozíciu vo vstupnom toku. boolean markSupported() : Testuje, či vstupný tok podporuje metódy označenia a resetovania. int read() : Číta bajt nekomprimovaných údajov. int read(byte[] b int off int len) : Číta dekomprimované údaje do poľa bajtov do komprimovaného výstupného toku, kde off je počiatočný posun údajov a len je celkový počet bajtov. void reset() : Premiestni tento tok na pozíciu v čase, keď bola na tomto vstupnom toku naposledy volaná metóda značky.
Kroky na dekomprimáciu súboru
  • Súbor s názvom „file2“ teraz obsahuje komprimované údaje a z tohto súboru potrebujeme získať pôvodné dekomprimované údaje.
  • Priraďte komprimovaný súbor „file2“ k FileInputStream. Pomáha to čítať údaje zo súboru „file2“.
  • Výstupný súbor „file3“ priraďte k FileOutputStream. Pomôže to zapisovať nekomprimované údaje do súboru „file3“.
  • Teraz si prečítajte nekomprimované údaje z InflaterInputStream a zapíšte ich do FileOutputStream. Toto zapíše nekomprimované údaje do súboru „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();    } } 
  Vytvoriť kvíz