logo

ضغط وفك ضغط الملفات في جافا

يتم توفير فئتي DeflaterOutputStream وInflaterInputStream في Java لضغط محتويات الملف وفك ضغطها. توفر هذه الفئات طرقًا مفيدة يمكن استخدامها لضغط محتوى الملف.

ضغط ملف باستخدام DeflaterOutputStream

تطبق هذه الفئة مرشح دفق الإخراج لضغط البيانات بتنسيق الضغط "الانكماش". كما يتم استخدامه كأساس لأنواع أخرى من مرشحات الضغط مثل GZIPOutputStream. طرق هامة:
    إغلاق باطل () : يكتب البيانات المضغوطة المتبقية إلى دفق الإخراج ويغلق الدفق الأساسي. الفراغ المحمي ينكمش () :يكتب الكتلة التالية من البيانات المضغوطة إلى دفق الإخراج. إنهاء الفراغ () : الانتهاء من كتابة البيانات المضغوطة إلى دفق الإخراج دون إغلاق الدفق الأساسي. تدفق الفراغ () : يمسح دفق الإخراج المضغوط. الكتابة باطلة (بايت [] ب int off int len):يكتب مصفوفة من البايتات إلى دفق الإخراج المضغوط حيث يكون off هو إزاحة البداية للبيانات ويكون len هو العدد الإجمالي للبايتات. الكتابة الفارغة (int ب):يكتب بايت إلى دفق الإخراج المضغوط.
خطوات ضغط ملف (ملف 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

تطبق هذه الفئة مرشح دفق لفك ضغط البيانات بتنسيق الضغط "الانكماش". كما يتم استخدامه كأساس لمرشحات إلغاء الضغط الأخرى مثل GZIPInputStream. طرق مهمة:
    العدد المتاح () : يُرجع 0 بعد الوصول إلى EOF، وإلا يُرجع دائمًا 1. إغلاق باطل () : يغلق دفق الإدخال ويحرر أي موارد نظام مرتبطة بالدفق. ملء الفراغ المحمي (): يملأ المخزن المؤقت للإدخال بمزيد من البيانات لفك الضغط. علامة باطلة (حد القراءة الدولي): يحدد الموضع الحالي في دفق الإدخال. العلامة المنطقية المدعومة () : يختبر ما إذا كان تدفق الإدخال يدعم طرق التحديد وإعادة التعيين. قراءة دولية (): يقرأ بايت من البيانات غير المضغوطة. قراءة int (بايت [] ب int off int len): يقرأ البيانات التي تم فك ضغطها إلى مصفوفة من البايتات إلى دفق الإخراج المضغوط حيث يكون off هو إزاحة البداية للبيانات ويكون len هو العدد الإجمالي للبايتات. إعادة تعيين باطلة (): يعيد وضع هذا الدفق إلى الموضع الذي تم فيه استدعاء طريقة العلامة آخر مرة على دفق الإدخال هذا.
خطوات فك ضغط ملف
  • يحتوي الملف الذي يحمل الاسم "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();    } } 
  إنشاء اختبار