logo

Компресиране и декомпресиране на файлове в Java

Класовете DeflaterOutputStream и InflaterInputStream са предоставени в Java за компресиране и декомпресиране на съдържанието на файла. Тези класове предоставят полезни методи, които могат да се използват за компресиране на съдържанието на файла.

Компресиране на файл с помощта на DeflaterOutputStream

Този клас имплементира филтър за изходен поток за компресиране на данни във формат за компресиране 'deflate'. Използва се и като основа за други видове филтри за компресия, като GZIPOutputStream. Важни методи:
    void close(): Записва останалите компресирани данни в изходния поток и затваря базовия поток. защитено void deflate() :Записва следващия блок от компресирани данни в изходния поток. void finish() : Завършва записването на компресирани данни в изходния поток, без да затваря базовия поток. void flush(): Промива компресирания изходен поток. void write(byte[] b int off int len) :Записва масив от байтове в компресирания изходен поток, където off е началното отместване на данните, а len е общият брой байтове. void write(int b) :Записва байт в компресирания изходен поток.
Стъпки за компресиране на файл (файл 1)
  • Вземете входен файл „файл 1“ във FileInputStream за четене на данни.
  • Вземете изходния файл „файл 2“ и го присвоете на FileOutputStream. Това ще помогне за запис на данни във „file2“.
  • Присвоете FileOutputStream на DeflaterOutputStream за компресиране на данните.
  • Сега прочетете данни от FileInputStream и ги запишете в DeflaterOutputStream. Той ще компресира данните и ще ги изпрати на FileOutputStream, който съхранява компресираните данни в изходния файл.
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();  } } 

Декомпресиране на файл с помощта на InflaterInputStream

Този клас имплементира поточен филтър за декомпресиране на данни във формат за компресиране „deflate“. Използва се и като основа за други филтри за декомпресия като GZIPInputStream. Важни методи:
    int available(): Връща 0 след достигане на EOF, в противен случай винаги връща 1. void close(): Затваря входния поток и освобождава всички системни ресурси, свързани с потока. защитено празно запълване(): Запълва входния буфер с повече данни за декомпресиране. void mark (int readlimit) : Маркира текущата позиция във входния поток. boolean markSupported(): Тества дали входният поток поддържа методите за маркиране и нулиране. int read(): Чете байт некомпресирани данни. int read(byte[] b int off int len) : Чете декомпресирани данни в масив от байтове към компресирания изходен поток, където off е началното отместване на данните, а len е общият брой байтове. void reset() : Препозиционира този поток на позицията към момента на последното извикване на метода за маркиране на този входен поток.
Стъпки за декомпресиране на файл
  • Файлът с име „file2“ вече съдържа компресирани данни и трябва да получим оригинални декомпресирани данни от този файл.
  • Присвоете компресирания файл „file2“ на FileInputStream. Това помага за четене на данни от „file2“.
  • Присвоете изходния файл „file3“ на FileOutputStream. Това ще помогне за запис на некомпресирани данни във „file3“.
  • Сега прочетете некомпресирани данни от InflaterInputStream и ги запишете във FileOutputStream. Това ще запише некомпресираните данни във „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();    } } 
  Създаване на тест