GZip (GNU Zip) একটি জনপ্রিয় কমপ্রেশন ফরম্যাট যা সাধারণত ফাইল সাইজ কমাতে ব্যবহৃত হয়। Java তে GZip ফাইল কম্প্রেস এবং আনকম্প্রেস করার জন্য java.util.zip.GZIPOutputStream এবং java.util.zip.GZIPInputStream ক্লাসগুলো ব্যবহার করা হয়।
GZip Compression (ফাইল কম্প্রেস করা)
GZip ফাইল কম্প্রেস করার জন্য আপনি GZIPOutputStream ক্লাস ব্যবহার করবেন। এটি একটি আউটপুট স্ট্রিম তৈরি করে, যা একটি ফাইলের কন্টেন্ট কম্প্রেস করে।
GZip ফাইল কম্প্রেস করার উদাহরণ:
import java.io.*;
import java.util.zip.GZIPOutputStream;
public class GZipCompressExample {
public static void main(String[] args) {
// ইনপুট এবং আউটপুট ফাইলের পাথ
String inputFilePath = "example.txt";
String outputFilePath = "example.txt.gz";
try (FileInputStream fis = new FileInputStream(inputFilePath);
FileOutputStream fos = new FileOutputStream(outputFilePath);
GZIPOutputStream gzipOS = new GZIPOutputStream(fos);
BufferedOutputStream bos = new BufferedOutputStream(gzipOS)) {
byte[] buffer = new byte[1024];
int length;
// ইনপুট ফাইল থেকে ডেটা পড়ে আউটপুট ফাইলে লিখুন
while ((length = fis.read(buffer)) > 0) {
bos.write(buffer, 0, length);
}
System.out.println("File successfully compressed to: " + outputFilePath);
} catch (IOException e) {
e.printStackTrace();
}
}
}
ব্যাখ্যা:
- FileInputStream: ইনপুট ফাইল (যেমন,
example.txt) থেকে ডেটা পড়তে ব্যবহার করা হয়েছে। - FileOutputStream: আউটপুট ফাইল (যেমন,
example.txt.gz) তৈরি করতে ব্যবহৃত হয়েছে। - GZIPOutputStream: GZip ফাইল কম্প্রেস করতে ব্যবহৃত স্ট্রিম। এটি
FileOutputStreamএর উপর "কম্প্রেসিং" স্ট্রিম হিসাবে কাজ করে। - BufferedOutputStream: ডেটা লেখার জন্য একটি বাফারড স্ট্রিম যা I/O অপারেশনকে দ্রুত এবং কার্যকরী করে।
এখানে, example.txt ফাইলটি example.txt.gz ফাইলে কম্প্রেস করা হচ্ছে।
GZip Decompression (ফাইল আনকম্প্রেস করা)
GZip ফাইল আনকম্প্রেস করার জন্য আপনি GZIPInputStream ক্লাস ব্যবহার করবেন। এটি একটি ইনপুট স্ট্রিম তৈরি করে, যা GZip কম্প্রেসড ফাইলের কন্টেন্ট ডিকম্প্রেস করে।
GZip ফাইল আনকম্প্রেস করার উদাহরণ:
import java.io.*;
import java.util.zip.GZIPInputStream;
public class GZipDecompressExample {
public static void main(String[] args) {
// ইনপুট এবং আউটপুট ফাইলের পাথ
String inputFilePath = "example.txt.gz";
String outputFilePath = "example_uncompressed.txt";
try (FileInputStream fis = new FileInputStream(inputFilePath);
GZIPInputStream gzipIS = new GZIPInputStream(fis);
FileOutputStream fos = new FileOutputStream(outputFilePath);
BufferedOutputStream bos = new BufferedOutputStream(fos)) {
byte[] buffer = new byte[1024];
int length;
// GZip ফাইল থেকে ডেটা পড়ে আউটপুট ফাইলে লেখুন
while ((length = gzipIS.read(buffer)) > 0) {
bos.write(buffer, 0, length);
}
System.out.println("File successfully decompressed to: " + outputFilePath);
} catch (IOException e) {
e.printStackTrace();
}
}
}
ব্যাখ্যা:
- FileInputStream: GZip কম্প্রেসড ফাইল (যেমন,
example.txt.gz) থেকে ডেটা পড়তে ব্যবহৃত হয়। - GZIPInputStream: GZip ফাইল ডিকম্প্রেস করতে ব্যবহৃত স্ট্রিম। এটি
FileInputStreamএর উপর ডিকম্প্রেসিং স্ট্রিম হিসেবে কাজ করে। - FileOutputStream: আনকম্প্রেসড ফাইল (যেমন,
example_uncompressed.txt) তৈরি করতে ব্যবহৃত হয়। - BufferedOutputStream: ডেটা লেখার জন্য একটি বাফারড স্ট্রিম, যা ফাইল আউটপুট অপারেশন দ্রুত করতে সাহায্য করে।
এখানে, example.txt.gz ফাইলটি example_uncompressed.txt ফাইলে আনকম্প্রেস করা হচ্ছে।
Important Notes:
- Buffer Size: ফাইল কম্প্রেস এবং আনকম্প্রেস করার সময় ভাল পারফরম্যান্সের জন্য একটি উপযুক্ত বাফার সাইজ ব্যবহার করা উচিত। সাধারণত 1024 বা 4096 বাইটের বাফার সাইজ ভাল কাজ করে।
- Error Handling:
IOExceptionধরনের ত্রুটি ঘটে যদি ফাইল না পাওয়া যায় অথবা I/O অপারেশন সফল না হয়। - File Size: GZip ফাইল কম্প্রেস করতে পারে বড় ফাইলগুলোও, তবে এটি ফাইলের ধরনের উপর নির্ভর করে। সাধারণত টেক্সট ফাইল এবং সোর্স কোড ফাইল কম্প্রেসে ভাল ফল দেয়।
Java তে GZip ফাইল কম্প্রেস এবং আনকম্প্রেস করা সহজ এবং কার্যকরীভাবে করা যায় GZIPOutputStream এবং GZIPInputStream ক্লাসের মাধ্যমে। এই ক্লাসগুলো ব্যবহার করে আপনি বড় ফাইলগুলোর সাইজ কমাতে এবং সেগুলিকে আবার আনকম্প্রেস করে ব্যবহার করতে পারবেন। GZip ফাইল কম্প্রেশন এবং ডিকম্প্রেশন কার্যকরভাবে করার জন্য এই পদ্ধতিগুলি ব্যবহার করুন।
GZip এবং Zip উভয়ই ফাইল কমপ্রেশন টেকনোলজি, তবে তাদের মধ্যে কিছু মূল পার্থক্য রয়েছে। GZip মূলত একক ফাইল কমপ্রেশন করার জন্য ডিজাইন করা হয়েছে, যেখানে Zip একাধিক ফাইল এবং ডিরেক্টরি কমপ্রেস করার জন্য ব্যবহৃত হয়। এছাড়া তাদের ফরম্যাট, ব্যবহার এবং ফিচার্সের মধ্যে কিছু পার্থক্য রয়েছে।
GZip এবং Zip এর মধ্যে পার্থক্য:
| বিশেষত্ব | GZip | Zip |
|---|---|---|
| প্রধান উদ্দেশ্য | GZip একটি ফাইল কমপ্রেশন ফরম্যাট, যা সাধারণত একক ফাইলের জন্য ব্যবহৃত হয়। | Zip ফরম্যাট একাধিক ফাইল এবং ডিরেক্টরি কমপ্রেস করার জন্য ব্যবহৃত হয়। |
| ফাইল সমর্থন | GZip সাধারণত একক ফাইলকে কমপ্রেস করতে ব্যবহার করা হয়। | Zip একাধিক ফাইল এবং ফোল্ডার কমপ্রেস করতে সক্ষম। |
| ফাইল এক্সটেনশন | .gz (যেমন file.txt.gz) | .zip (যেমন archive.zip) |
| কমপ্রেশন এলগরিদম | GZip সাধারণত DEFLATE এলগরিদম ব্যবহার করে। | Zip ফরম্যাটেও DEFLATE এলগরিদম ব্যবহার করা হয়, তবে এটি অন্য এলগরিদমও সাপোর্ট করে যেমন BZIP2 এবং LZMA। |
| ফাইল স্ট্রাকচার | GZip শুধুমাত্র একক ফাইলের জন্য কাজ করে এবং মেটাডেটা সংরক্ষণ করে না। | Zip ফরম্যাটে প্রতিটি ফাইলের জন্য মেটাডেটা (ফাইল নাম, সাইজ, মডিফিকেশন সময়, ইত্যাদি) সংরক্ষণ করা হয়। |
| রিড/রাইট অপারেশন | GZip ফাইল সাধারণত একে একে পড়া হয় (স্ট্রীমিং), এবং একাধিক ফাইলের উপর অপারেশন করা সম্ভব নয়। | Zip ফাইলগুলি স্টোর এবং এক্সট্রাক্ট করার সময় একাধিক ফাইলের জন্য রিড/রাইট অপারেশন করতে পারে। |
| ডিরেক্টরি সাপোর্ট | GZip ডিরেক্টরি বা ফোল্ডার সংরক্ষণ করতে পারে না, এটি একক ফাইলের জন্য। | Zip ফাইল ডিরেক্টরি এবং সাব-ডিরেক্টরি সাপোর্ট করে। |
| প্রসেসিং স্পিড | GZip সাধারণত দ্রুত কমপ্রেসন এবং ডিকমপ্রেসন প্রদান করে, কিন্তু একাধিক ফাইলের জন্য উপযুক্ত নয়। | Zip তুলনামূলকভাবে কিছুটা ধীর হতে পারে, কারণ এটি একাধিক ফাইল এবং ডিরেক্টরি পরিচালনা করে। |
| আধিকার এবং ব্যবহার | GZip সাধারণত লিনাক্স এবং ইউনিক্স সিস্টেমে ব্যবহৃত হয়, বিশেষ করে টার গ্যাজেটগুলি (যেমন .tar.gz) | Zip ফাইল ফরম্যাটটি উইন্ডোজ এবং ম্যাক সিস্টেমে বেশি ব্যবহৃত হয়। |
| ইনটিগ্রেশন ও কম্প্রেশন হার | GZip ফাইলগুলির জন্য খুব ভালো কম্প্রেশন হার প্রদান করে। | Zip ফরম্যাট কমপ্রেশন হারের দিক থেকে তুলনামূলকভাবে কিছুটা কম হতে পারে, তবে এটি একাধিক ফাইল সংরক্ষণ এবং এক্সট্রাকশন সুবিধা প্রদান করে। |
গুরুত্বপূর্ণ পার্থক্য:
- ফাইল সমর্থন:
- GZip একটি একক ফাইল কমপ্রেস করতে ব্যবহৃত হয়। এটি একাধিক ফাইল বা ডিরেক্টরি কমপ্রেস করতে সক্ষম নয়।
- Zip একাধিক ফাইল এবং ডিরেক্টরি কমপ্রেস করতে পারে। এটি একাধিক ফাইলের জন্য একটি একক আর্কাইভ তৈরি করে।
- ফাইল স্ট্রাকচার:
- GZip শুধুমাত্র কমপ্রেসড ডেটা সংরক্ষণ করে এবং মেটাডেটা (যেমন ফাইল নাম, টাইমস্ট্যাম্প) সংরক্ষণ করে না। এর ফলে, এটি একাধিক ফাইল সংরক্ষণ করতে সক্ষম নয়।
- Zip ফাইল স্ট্রাকচারটি বেশি সমৃদ্ধ এবং প্রতিটি এন্ট্রির জন্য মেটাডেটা ধারণ করে (যেমন ফাইল নাম, সাইজ, মডিফিকেশন সময় ইত্যাদি)।
- ডিরেক্টরি সাপোর্ট:
- GZip ডিরেক্টরি বা সাব-ফোল্ডারগুলির কমপ্রেশন সমর্থন করে না। এটি শুধুমাত্র একক ফাইলের জন্য।
- Zip ফোল্ডার ও সাব-ফোল্ডার গঠন সহ একাধিক ফাইল সংরক্ষণ করতে সক্ষম।
- কম্প্রেশন এলগরিদম:
- GZip সাধারণত DEFLATE এলগরিদম ব্যবহার করে।
- Zip ফরম্যাটটি DEFLATE, BZIP2, এবং LZMA সহ আরও কিছু এলগরিদম সমর্থন করে।
- ব্যবহার:
- GZip সাধারণত লিনাক্স বা ইউনিক্স সিস্টেমে ব্যবহৃত হয়, বিশেষ করে tar.gz ফাইলগুলির জন্য।
- Zip উইন্ডোজ সিস্টেমে বেশি ব্যবহৃত এবং এটি খুব জনপ্রিয় কমপ্রেশন ফরম্যাট।
- GZip সাধারণত একটি একক ফাইল কমপ্রেস করার জন্য ব্যবহৃত হয় এবং এটি উচ্চ কমপ্রেশন হার প্রদান করে। এটি সাধারণত লিনাক্স এবং ইউনিক্স সিস্টেমে ব্যবহৃত হয়, বিশেষ করে
.tar.gzফাইলগুলির জন্য। - Zip ফরম্যাটটি একাধিক ফাইল এবং ডিরেক্টরি কমপ্রেস করার জন্য ডিজাইন করা হয়েছে এবং উইন্ডোজ, ম্যাক এবং লিনাক্সে ব্যাপকভাবে ব্যবহৃত হয়। এটি ফাইল এবং ডিরেক্টরি ম্যানেজমেন্টের জন্য একটি আদর্শ সমাধান।
সুতরাং, আপনার প্রয়োজন অনুসারে, যদি আপনাকে একক ফাইল কমপ্রেস করতে হয়, তবে GZip ব্যবহার করুন, আর যদি একাধিক ফাইল বা ডিরেক্টরি কমপ্রেস করতে হয়, তবে Zip ব্যবহার করা সবচেয়ে ভালো।
GZipOutputStream হল Java তে gzip কম্প্রেশন ফর্ম্যাটে ডেটা কম্প্রেস করার জন্য ব্যবহৃত একটি ক্লাস। এটি Java API তে java.util.zip প্যাকেজে অন্তর্ভুক্ত এবং এটি GZIP ফাইল তৈরি করতে সহায়ক, যা সাধারণত টেক্সট ফাইল বা অন্যান্য ডেটা কম্প্রেস করতে ব্যবহৃত হয়।
GZipOutputStream ব্যবহার করে ফাইল কম্প্রেস করা খুবই সহজ এবং এটি মূলত FileOutputStream এর সাথে যুক্ত হয়ে কাজ করে। এখানে, আমি একটি উদাহরণ দেখাব যেখানে GZipOutputStream ব্যবহার করে একটি বা একাধিক ফাইলকে gzip ফরম্যাটে কম্প্রেস করা হবে।
GZipOutputStream এর মাধ্যমে ফাইল কম্প্রেস করা:
import java.io.*;
import java.util.zip.*;
public class GZipExample {
public static void main(String[] args) {
String sourceFileName = "example.txt"; // কম্প্রেস করার জন্য ফাইলের নাম
String gzipFileName = "example.txt.gz"; // আউটপুট GZIP ফাইলের নাম
try {
// GZipOutputStream ব্যবহার করে ফাইল কম্প্রেস করা
FileInputStream fis = new FileInputStream(sourceFileName); // ইনপুট ফাইল
FileOutputStream fos = new FileOutputStream(gzipFileName); // আউটপুট ফাইল
GZIPOutputStream gzipOS = new GZIPOutputStream(fos); // GZIPOutputStream তৈরি
byte[] buffer = new byte[1024]; // বাফার তৈরি
int length;
// ইনপুট ফাইল থেকে ডেটা পড়ে এবং কম্প্রেস করা
while ((length = fis.read(buffer)) > 0) {
gzipOS.write(buffer, 0, length); // GZIP আউটপুটে লেখে
}
// স্ট্রিমগুলো বন্ধ করা
fis.close();
gzipOS.finish();
gzipOS.close();
System.out.println("File successfully compressed into " + gzipFileName);
} catch (IOException e) {
e.printStackTrace();
}
}
}
কোডের ব্যাখ্যা:
- ফাইল স্ট্রিম তৈরি:
FileInputStreamদিয়ে ইনপুট ফাইলটি খোলা হয় এবংFileOutputStreamদিয়ে আউটপুট ফাইল (যেটি GZIP ফাইল হবে) তৈরি করা হয়।
- GZIPOutputStream তৈরি:
GZIPOutputStreamতৈরি করা হয়FileOutputStreamএর সাথে যুক্ত হয়ে, যা গেজিপ ফাইলের আউটপুট হিসেবে কাজ করবে।
- ডেটা কম্প্রেস করা:
FileInputStreamথেকে ফাইলের ডেটা পড়ে, এবং সেই ডেটাGZIPOutputStreamব্যবহার করে কম্প্রেস করা হয়। এখানে একটি বাফার ব্যবহার করা হচ্ছে, যা প্রতি বার ১ কিলোবাইট ডেটা পড়বে এবং কম্প্রেস করবে।
- finish() এবং close():
gzipOS.finish()কল করা হয় GZIP আউটপুট স্ট্রিম সম্পূর্ণ করার জন্য।- অবশেষে, স্ট্রিমগুলো বন্ধ করতে
fis.close()এবংgzipOS.close()ব্যবহার করা হয়।
ফলাফল:
এই কোডটি একটি example.txt.gz নামক GZIP ফাইল তৈরি করবে, যা example.txt ফাইলটি কম্প্রেস করে।
GZipOutputStream এর বৈশিষ্ট্য:
কম্প্রেশন লেভেল:
- GZipOutputStream এ একটি নির্দিষ্ট কম্প্রেশন লেভেল নির্বাচন করা যেতে পারে। এটি Deflater ক্লাসের মাধ্যমে করা হয়, যা নিম্নলিখিত লেভেলগুলির মধ্যে নির্বাচন করতে সক্ষম:
Deflater.NO_COMPRESSION(কম্প্রেশন না করা)Deflater.BEST_SPEED(সর্বোচ্চ গতি)Deflater.BEST_COMPRESSION(সর্বোচ্চ কম্প্রেশন)Deflater.DEFAULT_COMPRESSION(ডিফল্ট কম্প্রেশন)
উদাহরণ:
GZIPOutputStream gzipOS = new GZIPOutputStream(fos, Deflater.BEST_COMPRESSION);- GZipOutputStream এ একটি নির্দিষ্ট কম্প্রেশন লেভেল নির্বাচন করা যেতে পারে। এটি Deflater ক্লাসের মাধ্যমে করা হয়, যা নিম্নলিখিত লেভেলগুলির মধ্যে নির্বাচন করতে সক্ষম:
- GZIP হেডার:
- GZIPOutputStream স্বয়ংক্রিয়ভাবে GZIP হেডার যোগ করে, যা কম্প্রেসড ফাইলের মধ্যে ফাইল মেটাডেটা (যেমন ফাইল নাম, টাইমস্ট্যাম্প) সংরক্ষণ করে।
- ফাইল স্ট্রিম এবং GZIP স্ট্রিম:
- GZIPOutputStream এর ব্যবহার ফাইল স্ট্রিমের উপর ভিত্তি করে, যা ডেটার ইনপুট এবং আউটপুট পরিচালনা করে।
GZipOutputStream ব্যবহার করে Java তে ফাইল কম্প্রেস করা সহজ এবং কার্যকরী। এটি সাধারণত টেক্সট ফাইল এবং অন্যান্য ডেটার জন্য ব্যবহার হয়। যখন বড় ডেটা বা ফাইলের আকার কমানো প্রয়োজন হয়, তখন gzip খুবই জনপ্রিয় এবং কার্যকরী। Java তে GZipOutputStream ফাইল কম্প্রেস করতে আপনাকে উন্নত কম্প্রেশন সুবিধা প্রদান করে, যা স্টোরেজ খরচ এবং ডেটা ট্রান্সফারের সময় কমাতে সাহায্য করে।
GZipInputStream Java এর java.util.zip প্যাকেজের একটি ক্লাস, যা GZIP ফাইল কমপ্রেসড ফরম্যাট থেকে ডেটা আনকম্প্রেস (decompress) করার জন্য ব্যবহৃত হয়। GZIP হলো একটি জনপ্রিয় কমপ্রেসন ফরম্যাট যা সাধারণত ফাইল কমপ্রেস করার জন্য ব্যবহৃত হয়, বিশেষ করে টেক্সট ফাইল বা লগ ফাইল কমপ্রেস করতে।
GZipInputStream ব্যবহার করে আপনি GZIP কমপ্রেসড ফাইল থেকে ডেটা আনকম্প্রেস করতে পারেন এবং এটি একটি InputStream এর মতো কাজ করে, যার মাধ্যমে আপনি ডেটা স্ট্রীমের মাধ্যমে ফাইলটি পড়তে পারেন।
GZipInputStream এর মাধ্যমে ফাইল Uncompress করার পদ্ধতি:
- GZIP ফাইল খুলুন: প্রথমে একটি
FileInputStreamতৈরি করুন যা GZIP ফাইলটি পড়বে। - GZipInputStream তৈরি করুন:
GZipInputStreamব্যবহার করে আপনি GZIP ফাইলটি আনকম্প্রেস করতে পারবেন। - ফাইলের ডেটা পড়ুন: এরপর আপনি read() মেথড ব্যবহার করে ফাইলের ডেটা পড়তে পারবেন এবং আনকম্প্রেসড ডেটা প্রসেস করতে পারবেন।
- ফাইলের ডেটা একটি নতুন ফাইলে লিখুন: আনকম্প্রেসড ডেটা একটি নতুন ফাইলে লেখার জন্য
FileOutputStreamব্যবহার করতে পারেন।
GZipInputStream এর মাধ্যমে ফাইল Uncompress করার উদাহরণ:
import java.io.*;
import java.util.zip.*;
public class GZipDecompressExample {
public static void main(String[] args) {
// GZIP ফাইলের ইনপুট এবং আউটপুট ফাইলের পাথ
String inputFile = "compressed-file.gz"; // কমপ্রেসড GZIP ফাইল
String outputFile = "decompressed-file.txt"; // আউটপুট আনকম্প্রেসড ফাইল
try {
// GZIP ফাইল থেকে ইনপুট স্ট্রীম তৈরি করা
FileInputStream fis = new FileInputStream(inputFile);
GZIPInputStream gis = new GZIPInputStream(fis);
// আউটপুট ফাইলের জন্য আউটপুট স্ট্রীম তৈরি করা
FileOutputStream fos = new FileOutputStream(outputFile);
byte[] buffer = new byte[1024];
int length;
// ফাইল থেকে ডেটা পড়ুন এবং আউটপুট ফাইলে লেখুন
while ((length = gis.read(buffer)) > 0) {
fos.write(buffer, 0, length);
}
// স্ট্রীম বন্ধ করুন
gis.close();
fos.close();
fis.close();
System.out.println("ফাইল আনকম্প্রেসড সফলভাবে সম্পন্ন হয়েছে।");
} catch (IOException e) {
e.printStackTrace();
}
}
}
Code Explanation:
- FileInputStream fis: প্রথমে
FileInputStreamব্যবহার করে GZIP কমপ্রেসড ফাইলটি পড়া হয়। - GZIPInputStream gis:
GZIPInputStreamব্যবহার করা হয় যাতে কমপ্রেসড ফাইলটি আনকম্প্রেস করা যায়। এটি একটি স্ট্রীমের মাধ্যমে কমপ্রেসড ডেটা পড়তে সক্ষম। - FileOutputStream fos: আউটপুট ফাইলের জন্য
FileOutputStreamতৈরি করা হয় যাতে আনকম্প্রেসড ডেটা একটি নতুন ফাইলে লেখা যায়। - gis.read(buffer):
read()মেথড ব্যবহার করে GZIP ফাইল থেকে ডেটা পড়া হয় এবংbufferএ রেখে আউটপুট ফাইলে লেখা হয়। - স্ট্রীম বন্ধ করা: কাজ শেষ হওয়ার পর, সব স্ট্রীম (
GZIPInputStream,FileOutputStream,FileInputStream) বন্ধ করা হয়।
GZipInputStream ব্যবহার করার সুবিধা:
- Memory Efficient: GZipInputStream স্ট্রীমিংয়ের মাধ্যমে ডেটা আনকম্প্রেস করে, ফলে এটি মেমরি কম ব্যবহার করে।
- Easy to Integrate: এটি খুব সহজে Java অ্যাপ্লিকেশনগুলিতে ইন্টিগ্রেট করা যায় এবং GZIP ফাইল ডেটাকে প্রসেস করার জন্য কোনো অতিরিক্ত কনফিগারেশন দরকার হয় না।
- File Handling: GZIP ফাইলের ডেটা একটি নতুন ফাইলে আনকম্প্রেস করার জন্য
FileOutputStreamব্যবহার করে খুব সহজে কাজ করা যায়।
GZipInputStream একটি শক্তিশালী Java ক্লাস যা GZIP ফাইল কমপ্রেসড ফরম্যাট থেকে ডেটা আনকম্প্রেস করার জন্য ব্যবহৃত হয়। এটি খুবই কার্যকরী যখন আপনার কাছে GZIP ফাইল থাকে এবং সেগুলি সহজে এবং দ্রুত আনকম্প্রেস করে কাজ করতে হয়।
GZip (GNU Zip) হল একটি জনপ্রিয় ফাইল কম্প্রেশন প্রযুক্তি, যা ফাইল কমপ্রেশন এবং ডিকমপ্রেশন করার জন্য ব্যবহৃত হয়। Java তে GZip ব্যবহার করে বড় ফাইল কমপ্রেস করতে java.util.zip.GZIPOutputStream এবং java.util.zip.GZIPInputStream ক্লাসগুলো ব্যবহার করা হয়।
GZip প্রধানত একক ফাইল কম্প্রেস করতে ব্যবহৃত হয়, এবং এটি .gz এক্সটেনশন সহ আর্কাইভ ফাইল তৈরি করে।
এখানে একটি উদাহরণ দেওয়া হলো, যা দেখাবে কিভাবে GZip এর মাধ্যমে বড় ফাইল কমপ্রেস করা যায় এবং পরে সেই কম্প্রেসড ফাইল এক্সট্রাক্ট করা যায়।
GZip এর মাধ্যমে ফাইল কম্প্রেস করার উদাহরণ
এই উদাহরণে, একটি ফাইল largefile.txt কে largefile.txt.gz নামে GZip ফাইল কম্প্রেস করা হবে।
ফাইল কম্প্রেস করার কোড:
import java.io.*;
import java.util.zip.*;
public class GZipExample {
public static void main(String[] args) {
// ইনপুট ফাইল এবং আউটপুট GZip ফাইলের নাম
String inputFile = "largefile.txt";
String outputFile = "largefile.txt.gz";
try {
// ইনপুট ফাইলের জন্য FileInputStream
FileInputStream fis = new FileInputStream(inputFile);
// আউটপুট GZip ফাইলের জন্য FileOutputStream
FileOutputStream fos = new FileOutputStream(outputFile);
// GZIPOutputStream দিয়ে ফাইল কম্প্রেস করা
GZIPOutputStream gzipOS = new GZIPOutputStream(fos);
byte[] buffer = new byte[1024];
int length;
// ইনপুট ফাইল থেকে ডেটা পড়া এবং GZip আউটপুট স্ট্রিমে লেখা
while ((length = fis.read(buffer)) >= 0) {
gzipOS.write(buffer, 0, length);
}
// স্ট্রিম বন্ধ করা
gzipOS.finish();
gzipOS.close();
fis.close();
System.out.println("File compressed successfully using GZip!");
} catch (IOException e) {
e.printStackTrace();
}
}
}
কোডের ব্যাখ্যা:
- FileInputStream: এটি ইনপুট ফাইলের ডেটা পড়তে ব্যবহৃত হয়।
- FileOutputStream: এটি আউটপুট ফাইল লিখতে ব্যবহৃত হয়, যেখানে GZip ফাইলটি সঞ্চয় করা হবে।
- GZIPOutputStream: এটি ইনপুট ফাইলের ডেটাকে GZip ফরম্যাটে কম্প্রেস করে আউটপুট ফাইলে লেখে।
- Buffer: কম্প্রেস করা ফাইলের ডেটা buffer (1024 বাইট) ব্যবহার করে প্রক্রিয়া করা হয়, যাতে বড় ফাইলের ডেটা স্ট্রিমের মাধ্যমে কম্প্রেস করা যায়।
ফাইল এক্সট্রাক্ট করার কোড:
এখন, আমরা দেখবো কিভাবে একটি GZip ফাইল (যেমন, largefile.txt.gz) থেকে ডেটা এক্সট্রাক্ট করা যায়।
import java.io.*;
import java.util.zip.*;
public class GZipExtractExample {
public static void main(String[] args) {
// ইনপুট GZip ফাইল এবং আউটপুট ফাইলের নাম
String inputFile = "largefile.txt.gz";
String outputFile = "largefile.txt";
try {
// ইনপুট GZip ফাইলের জন্য FileInputStream
FileInputStream fis = new FileInputStream(inputFile);
// GZIPInputStream দিয়ে GZip ফাইল এক্সট্রাক্ট করা
GZIPInputStream gzipIS = new GZIPInputStream(fis);
// আউটপুট ফাইলের জন্য FileOutputStream
FileOutputStream fos = new FileOutputStream(outputFile);
byte[] buffer = new byte[1024];
int length;
// GZip ফাইল থেকে ডেটা পড়া এবং আউটপুট ফাইলে লেখা
while ((length = gzipIS.read(buffer)) >= 0) {
fos.write(buffer, 0, length);
}
// স্ট্রিম বন্ধ করা
gzipIS.close();
fos.close();
fis.close();
System.out.println("File extracted successfully from GZip!");
} catch (IOException e) {
e.printStackTrace();
}
}
}
কোডের ব্যাখ্যা:
- FileInputStream: এটি GZip ইনপুট ফাইল থেকে ডেটা পড়তে ব্যবহৃত হয়।
- GZIPInputStream: এটি GZip ফাইল ডিকমপ্রেস করে, অর্থাৎ ফাইল থেকে ডেটা বের করে এবং আউটপুট স্ট্রিমে দেয়।
- FileOutputStream: এটি আউটপুট ফাইল (যেমন,
largefile.txt) তৈরি করে এবং GZip থেকে ডেটা বের করে সেই ফাইলে লেখে। - Buffer: GZip ফাইল থেকে ডেটা বের করার জন্য একটি 1024 বাইটের buffer ব্যবহার করা হয়েছে।
গুরুত্বপূর্ণ টিপস:
- Memory Efficiency: GZip এর মাধ্যমে বড় ফাইল কম্প্রেস করার সময়, আপনি যদি ছোট buffer সাইজ (যেমন 1024 বাইট) ব্যবহার করেন, তবে এটি মেমরি খরচ কমিয়ে ডেটা স্ট্রীমিং করতে সহায়তা করবে।
- Error Handling: বড় ফাইল কম্প্রেস এবং এক্সট্রাক্ট করার সময়,
IOExceptionএর মত সম্ভাব্য ত্রুটির জন্য সঠিক error handling করা উচিত। - Performance: যদি আপনার কম্প্রেশন প্রক্রিয়াটি খুব বড় ফাইলের জন্য হয়, তবে কিছু ফাইল সাইজের জন্য GZip কমপ্রেশন বেশ সময় নিতে পারে। তবে, এটি সাধারণত অন্যান্য কমপ্রেশন ফরম্যাটের তুলনায় অনেক দ্রুত।
Java তে GZip ব্যবহার করে আপনি বড় ফাইলকে অত্যন্ত দক্ষভাবে কমপ্রেস করতে পারেন। GZIPOutputStream এবং GZIPInputStream ক্লাসের মাধ্যমে খুব সহজেই GZip ফাইল তৈরি এবং ডিকমপ্রেস করা যায়। এটি Java তে ফাইল কম্প্রেশন এবং ডিকমপ্রেশন করার একটি জনপ্রিয় এবং কার্যকরী পদ্ধতি।
Read more