logo

Sažimanje i dekomprimiranje datoteka u Javi

Klase DeflaterOutputStream i InflaterInputStream  omogućene su u Javi za kompresiju i dekompresiju sadržaja datoteke. Ove klase pružaju korisne metode koje se mogu koristiti za komprimiranje sadržaja datoteke.

Sažimanje datoteke pomoću DeflaterOutputStream

Ova klasa implementira filtar izlaznog toka za komprimiranje podataka u 'deflate' kompresijskom formatu. Također se koristi kao osnova za druge vrste kompresijskih filtara kao što je GZIPOutputStream. Važne metode:
    void close() : Zapisuje preostale komprimirane podatke u izlazni tok i zatvara temeljni tok. zaštićeni void deflate() :Zapisuje sljedeći blok komprimiranih podataka u izlazni tok. void finish() : Završava pisanje komprimiranih podataka u izlazni tok bez zatvaranja temeljnog toka. void flush() : Ispire komprimirani izlazni tok. void write(byte[] b int off int len) :Zapisuje niz bajtova u komprimirani izlazni tok gdje je off početni pomak podataka, a len ukupni broj bajtova. void write(int b) :Zapisuje bajt u komprimirani izlazni tok.
Koraci za komprimiranje datoteke (datoteka 1)
  • Uzmite ulaznu datoteku 'file 1' u FileInputStream za čitanje podataka.
  • Uzmite izlaznu datoteku 'file 2' i dodijelite je FileOutputStream. Ovo će pomoći upisivanju podataka u 'file2'.
  • Dodijelite FileOutputStream DeflaterOutputStream za komprimiranje podataka.
  • Sada pročitajte podatke iz FileInputStream i zapišite ih u DeflaterOutputStream. Komprimirati će podatke i poslati ih u FileOutputStream koji pohranjuje komprimirane podatke u izlaznu datoteku.
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();  } } 

Dekomprimiranje datoteke pomoću InflaterInputStream

Ova klasa implementira filtar toka za dekomprimiranje podataka u formatu kompresije 'deflate'. Također se koristi kao osnova za druge dekompresijske filtre kao što je GZIPInputStream. Važne metode:
    int dostupan() : Vraća 0 nakon što je dosegnut EOF inače uvijek vraća 1. void close() : Zatvara ulazni tok i oslobađa sve sistemske resurse povezane s tokom. zaštićeno popunjavanje praznine() : Ispunjava ulazni međuspremnik s više podataka za dekompresiju. void mark(int readlimit) : Označava trenutnu poziciju u ulaznom toku. boolean markSupported() : Testira podržava li ulazni tok metode označavanja i resetiranja. int read() : Čita bajt nekomprimiranih podataka. int read(byte[] b int off int len) : Čita dekomprimirane podatke u niz bajtova u komprimirani izlazni tok gdje je off početni pomak podataka, a len ukupni broj bajtova. void reset() : Ponovno pozicionira ovaj tok na poziciju u vrijeme kada je metoda označavanja posljednji put pozvana na ovom ulaznom toku.
Koraci za dekompresiju datoteke
  • Datoteka pod nazivom 'file2' sada sadrži komprimirane podatke i moramo dobiti izvorne dekomprimirane podatke iz te datoteke.
  • Dodijelite komprimiranu datoteku 'file2' FileInputStream-u. Ovo pomaže u čitanju podataka iz 'file2'.
  • Dodijelite izlaznu datoteku 'file3' FileOutputStream-u. To će pomoći pri zapisivanju nekomprimiranih podataka u 'file3'.
  • Sada pročitajte nekomprimirane podatke iz InflaterInputStream i zapišite ih u FileOutputStream. Ovo će zapisati nekomprimirane podatke u '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();    } } 
  Napravi kviz