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 для читання даних.
  • Візьміть вихідний файл «file 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 fill() : Заповнює вхідний буфер додатковими даними для розпакування. void mark(int readlimit) : Позначає поточну позицію у вхідному потоці. логічне значення markSupported(): Перевіряє, чи підтримує вхідний потік методи позначення та скидання. int read() : Читає байт нестиснутих даних. int read(byte[] b int off int len) : Зчитує розпаковані дані в масив байтів у стиснений вихідний потік, де off — початкове зміщення даних, а len — загальна кількість байтів. void reset() : Переставляє цей потік на позицію під час останнього виклику методу mark у цьому вхідному потоці.
Кроки для розпакування файлу
  • Файл із назвою «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();    } } 
  Створіть вікторину