logo

Kompresja i dekompresja plików w Javie

Klasy DeflaterOutputStream i InflaterInputStream są dostępne w Javie i służą do kompresji i dekompresji zawartości plików. Klasy te udostępniają przydatne metody, których można użyć do kompresowania zawartości pliku.

Kompresowanie pliku przy użyciu DeflaterOutputStream

Ta klasa implementuje filtr strumienia wyjściowego do kompresji danych w formacie kompresji „deflate”. Jest również używany jako podstawa dla innych typów filtrów kompresyjnych, takich jak GZIPOutputStream. Ważne metody:
    puste zamknięcie(): Zapisuje pozostałe skompresowane dane w strumieniu wyjściowym i zamyka strumień bazowy. chroniona pusta deflate() :Zapisuje następny blok skompresowanych danych w strumieniu wyjściowym. puste zakończenie(): Kończy zapisywanie skompresowanych danych w strumieniu wyjściowym bez zamykania strumienia bazowego. puste opróżnienie() : Opróżnia skompresowany strumień wyjściowy. void write(byte[] b int off int len):Zapisuje tablicę bajtów w skompresowanym strumieniu wyjściowym, gdzie off to początkowe przesunięcie danych, a len to całkowita liczba bajtów. nieważny zapis (int b):Zapisuje bajt w skompresowanym strumieniu wyjściowym.
Kroki, aby skompresować plik (plik 1)
  • Pobierz plik wejściowy „plik 1” do FileInputStream w celu odczytania danych.
  • Weź plik wyjściowy „plik 2” i przypisz go do FileOutputStream . Pomoże to zapisać dane w „pliku2”.
  • Przypisz FileOutputStream do DeflaterOutputStream w celu skompresowania danych.
  • Teraz odczytaj dane z FileInputStream i zapisz je w DeflaterOutputStream. Skompresuje dane i wyśle ​​je do FileOutputStream, który przechowuje skompresowane dane w pliku wyjściowym.
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();  } } 

Dekompresja pliku za pomocą InflaterInputStream

Ta klasa implementuje filtr strumieniowy do dekompresowania danych w formacie kompresji „deflate”. Jest również używany jako podstawa dla innych filtrów dekompresyjnych, takich jak GZIPInputStream. Ważne metody:
    int dostępne(): Zwraca 0 po osiągnięciu EOF, w przeciwnym razie zawsze zwraca 1. puste zamknięcie(): Zamyka strumień wejściowy i zwalnia wszystkie zasoby systemowe powiązane ze strumieniem. chronione wypełnienie pustej przestrzeni() : Wypełnia bufor wejściowy większą ilością danych do dekompresji. pusty znak (int readlimit): Oznacza bieżącą pozycję w strumieniu wejściowym. wartość logiczna markSupported() : Testuje, czy strumień wejściowy obsługuje metody zaznaczania i resetowania. int czytaj(): Odczytuje bajt nieskompresowanych danych. int read(bajt[] b int off int len): Odczytuje zdekompresowane dane do tablicy bajtów do skompresowanego strumienia wyjściowego, gdzie off to początkowe przesunięcie danych, a len to całkowita liczba bajtów. nieważne resetowanie(): Zmienia położenie tego strumienia do pozycji w momencie ostatniego wywołania metody mark w tym strumieniu wejściowym.
Kroki dekompresji pliku
  • Plik o nazwie „plik2” zawiera teraz skompresowane dane i musimy uzyskać z tego pliku oryginalne, zdekompresowane dane.
  • Przypisz skompresowany plik „file2” do FileInputStream. Pomaga to w odczytaniu danych z „pliku2”.
  • Przypisz plik wyjściowy „file3” do FileOutputStream. Pomoże to zapisać nieskompresowane dane w „pliku 3”.
  • Teraz przeczytaj nieskompresowane dane z InflaterInputStream i zapisz je w FileOutputStream. Spowoduje to zapisanie nieskompresowanych danych w „pliku3”.
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();    } } 
  Utwórz quiz