logo

Komprese a dekomprese souborů v Javě

Třídy DeflaterOutputStream a InflaterInputStream  jsou poskytovány v jazyce Java pro kompresi a dekomprimaci obsahu souboru. Tyto třídy poskytují užitečné metody, které lze použít ke kompresi obsahu souboru.

Komprese souboru pomocí DeflaterOutputStream

Tato třída implementuje filtr výstupního proudu pro kompresi dat v kompresním formátu 'deflate'. Používá se také jako základ pro další typy kompresních filtrů, jako je GZIPOutputStream. Důležité metody:
    void close() : Zapíše zbývající komprimovaná data do výstupního proudu a zavře podkladový proud. chráněná void deflate() :Zapíše další blok komprimovaných dat do výstupního proudu. void finish() : Dokončí zápis komprimovaných dat do výstupního proudu bez uzavření základního proudu. void flush() : Vyprázdní komprimovaný výstupní proud. void write(byte[] b int off int len) :Zapíše pole bajtů do komprimovaného výstupního proudu, kde off je počáteční offset dat a len je celkový počet bajtů. void write(int b):Zapíše bajt do komprimovaného výstupního proudu.
Kroky ke kompresi souboru (soubor 1)
  • Vezměte vstupní soubor „soubor 1“ do FileInputStream pro čtení dat.
  • Vezměte výstupní soubor ‚soubor 2‘ a přiřaďte jej FileOutputStream . To pomůže zapsat data do „souboru2“.
  • Přiřaďte FileOutputStream k DeflaterOutputStream pro kompresi dat.
  • Nyní čtěte data z FileInputStream a zapište je do DeflaterOutputStream. Zkomprimuje data a odešle je do FileOutputStream, který uloží komprimovaná data do výstupního souboru.
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();  } } 

Dekomprimace souboru pomocí InflaterInputStream

Tato třída implementuje proudový filtr pro dekomprimaci dat v kompresním formátu 'deflate'. Používá se také jako základ pro další dekompresní filtry, jako je GZIPInputStream. Důležité metody:
    int dostupné() : Vrátí 0 po dosažení EOF, jinak vždy vrátí 1. void close() : Zavře vstupní datový proud a uvolní veškeré systémové prostředky spojené s datovým proudem. chráněná void fill() : Vyplní vstupní vyrovnávací paměť více daty k dekomprimaci. void mark (int readlimit) : Označuje aktuální pozici ve vstupním toku. boolean markSupported() : Testuje, zda vstupní proud podporuje metody označení a resetování. int read(): Přečte bajt nekomprimovaných dat. int read(byte[] b int off int len) : Čte dekomprimovaná data do pole bajtů do komprimovaného výstupního proudu, kde off je počáteční offset dat a len je celkový počet bajtů. void reset() : Přemístí tento tok na pozici v době, kdy byla na tomto vstupním toku naposledy volána metoda označení.
Kroky k dekomprimaci souboru
  • Soubor s názvem ‚file2‘ nyní obsahuje komprimovaná data a z tohoto souboru potřebujeme získat původní dekomprimovaná data.
  • Přiřaďte komprimovaný soubor ‚file2‘ k FileInputStream. To pomáhá číst data ze „souboru2“.
  • Přiřaďte výstupní soubor ‚file3‘ k FileOutputStream. To pomůže zapsat nekomprimovaná data do „file3“.
  • Nyní si přečtěte nekomprimovaná data z InflaterInputStream a zapište je do FileOutputStream. To zapíše nekomprimovaná data do „souboru3“.
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();    } } 
  Vytvořit kvíz