logo

דחיסה וביטול דחיסה של קבצים ב-Java

מחלקות DeflaterOutputStream ו-InflaterInputStream מסופקות ב-Java כדי לדחוס ולשחרר את תוכן הקובץ. מחלקות אלו מספקות שיטות שימושיות שניתן להשתמש בהן לדחיסת תוכן הקובץ.

דחיסת קובץ באמצעות DeflaterOutputStream

מחלקה זו מיישמת מסנן זרם פלט לדחיסת נתונים בפורמט הדחיסה 'deflate'. הוא משמש גם כבסיס לסוגים אחרים של מסנני דחיסה כגון GZIPOutputStream. שיטות חשובות:
    void close() : כותב את הנתונים הדחוסים שנותרו לזרם הפלט וסוגר את הזרם הבסיסי. protected void deflate() :כותב את הבלוק הבא של נתונים דחוסים לזרם הפלט. void finish() : מסיים לכתוב נתונים דחוסים לזרם הפלט מבלי לסגור את הזרם הבסיסי. void flush() : שוטף את זרם הפלט הדחוס. void write(byte[] b int off int len) :כותב מערך של בתים לזרם הפלט הדחוס כאשר כבוי הוא קיזוז ההתחלה של נתונים ו-len הוא המספר הכולל של בתים. void write(int b):כותב בייט לזרם הפלט הדחוס.
שלבים לדחיסת קובץ (קובץ 1)
  • קח קובץ קלט 'קובץ 1' ל-FileInputStream לקריאת נתונים.
  • קח את קובץ הפלט 'קובץ 2' והקצה אותו ל-FileOutputStream. זה יעזור לכתוב נתונים לתוך 'קובץ2'.
  • הקצה 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

מחלקה זו מיישמת מסנן זרמים לביטול דחיסה של נתונים בפורמט הדחיסה 'לרוקן'. הוא משמש גם כבסיס למסנני דקומפרסיה אחרים כגון GZIPInputStream. שיטות חשובות:
    int available() : מחזירה 0 לאחר שהושג EOF אחרת תמיד תחזיר 1. void close() : סוגר את זרם הקלט ומשחרר את כל משאבי המערכת המשויכים לזרם. protected void fill(): ממלא את מאגר הקלט בנתונים נוספים לביטול הדחיסה. void mark (int readlimit): מסמן את המיקום הנוכחי בזרם הקלט. boolean markSupported() : בודק אם זרם הקלט תומך בשיטות הסימון והאיפוס. int read() : קורא בייט של נתונים לא דחוסים. int read(byte[] b int off int len): קורא נתונים לא דחוסים למערך של בתים לזרם הפלט הדחוס כאשר כבוי הוא קיזוז ההתחלה של הנתונים ו-len הוא המספר הכולל של בתים. void reset() : ממקם מחדש את הזרם הזה למיקום בזמן שבו נקראה שיטת הסימון בפעם האחרונה בזרם הקלט הזה.
שלבים לפירוק קובץ
  • קובץ עם השם 'file2' מכיל כעת נתונים דחוסים ועלינו להשיג נתונים מקוריים מפורקים מהקובץ הזה.
  • הקצה את הקובץ הדחוס 'file2' ל-FileInputStream. זה עוזר לקרוא נתונים מ'file2'.
  • הקצה את קובץ הפלט 'file3' ל-FileOutputStream. זה יעזור לכתוב נתונים לא דחוסים לתוך 'קובץ3'.
  • כעת קרא נתונים לא דחוסים מ-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();    } } 
  צור חידון