File Compression হল একটি প্রক্রিয়া যার মাধ্যমে ফাইলের আকার কমানো হয়, যাতে তা কম স্পেসে সংরক্ষণ করা যায় বা দ্রুত ট্রান্সফার করা যায়। Java I/O প্যাকেজে ZipInputStream এবং ZipOutputStream ক্লাসের মাধ্যমে ফাইল কম্প্রেস এবং ডি-কম্প্রেস করা যেতে পারে, যা ZIP ফাইল ফরম্যাট ব্যবহার করে।
ফাইল কম্প্রেস করার প্রক্রিয়া সাধারণত data encoding techniques ব্যবহার করে, যা ফাইলের আকার ছোট করে, তবে ফাইলের মূল কন্টেন্ট অপরিবর্তিত রাখে।
File Compression এর প্রয়োজনীয়তা:
- স্পেস সাশ্রয়:
- ফাইল কম্প্রেস করার সবচেয়ে বড় সুবিধা হল storage space এর সাশ্রয়। বড় ডেটা সেট যেমন লগ ফাইল, ইমেজ, ভিডিও, বা ডাটাবেসের আর্কাইভিংয়ের জন্য কম্প্রেশন কার্যকরী হয়।
- ডেটা ট্রান্সফারের গতি বাড়ানো:
- কম্প্রেস করা ফাইলগুলি সহজে এবং দ্রুত নেটওয়ার্ক বা অন্যান্য যোগাযোগ চ্যানেলে ট্রান্সফার করা যায়, কারণ ফাইলের আকার ছোট হয়ে যায়।
- ব্যান্ডউইথ সাশ্রয়:
- ইন্টারনেট বা নেটওয়ার্কে ডেটা পাঠানোর সময় কম্প্রেসড ফাইল পাঠানো হলে ব্যান্ডউইথ কম ব্যবহৃত হয়, যা নেটওয়ার্কের চাপ কমায়।
- ফাইল সংরক্ষণ এবং ব্যাকআপ:
- কম্প্রেসড ফাইলগুলি দীর্ঘ সময় ধরে সংরক্ষণ এবং ব্যাকআপ রাখার জন্য উপযুক্ত, কারণ এটি স্থান সাশ্রয়ী এবং দ্রুত সংরক্ষণ করা যায়।
- ফাইলের নিরাপত্তা এবং সংরক্ষণ:
- অনেক সময় Encryption এবং Compression একসঙ্গে করা হয়, যা ডেটাকে সুরক্ষিত এবং স্থান সাশ্রয়ী করে রাখে।
Java I/O তে File Compression
Java I/O প্যাকেজে ZipInputStream এবং ZipOutputStream ক্লাসগুলো ZIP ফাইল ফরম্যাট ব্যবহারের মাধ্যমে ফাইল কম্প্রেশন এবং ডি-কম্প্রেশন কাজ সহজ করে দেয়। ZipOutputStream ক্লাস ফাইল বা ডেটা কম্প্রেস করতে ব্যবহৃত হয় এবং ZipInputStream ক্লাস কম্প্রেসড ফাইল থেকে ডেটা এক্সট্র্যাক্ট করতে ব্যবহৃত হয়।
File Compression উদাহরণ:
1. File Compression using ZipOutputStream
এখানে একটি উদাহরণ দেওয়া হয়েছে যেখানে আমরা ZipOutputStream ক্লাস ব্যবহার করে একটি ফোল্ডারের সমস্ত ফাইলকে কম্প্রেস করব।
import java.io.*;
import java.util.zip.*;
public class FileCompressionExample {
public static void main(String[] args) {
String sourceDir = "inputFolder"; // ফোল্ডারের পাথ যেখানে ফাইলগুলো আছে
String zipFile = "compressed.zip"; // কম্প্রেস করা ফাইলের নাম
try (ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(zipFile))) {
File dir = new File(sourceDir);
if (dir.isDirectory()) {
File[] files = dir.listFiles();
if (files != null) {
for (File file : files) {
compressFile(file, zos); // ফাইল কম্প্রেস করা
}
}
}
System.out.println("Files compressed successfully into " + zipFile);
} catch (IOException e) {
e.printStackTrace();
}
}
private static void compressFile(File file, ZipOutputStream zos) throws IOException {
try (FileInputStream fis = new FileInputStream(file)) {
ZipEntry entry = new ZipEntry(file.getName());
zos.putNextEntry(entry);
byte[] buffer = new byte[1024];
int length;
while ((length = fis.read(buffer)) > 0) {
zos.write(buffer, 0, length);
}
zos.closeEntry();
}
}
}
ব্যাখ্যা:
ZipOutputStreamব্যবহার করা হয়েছে একটি নতুন zip ফাইল তৈরি করতে এবং সেই ফাইলের মধ্যে একাধিক ফাইলকে কম্প্রেস করা হয়েছে।putNextEntry()মেথড দ্বারা একটি নতুন ZipEntry তৈরি করা হয়েছে যা কম্প্রেস করা ফাইলের প্রতিনিধিত্ব করে।closeEntry()মেথডের মাধ্যমে প্রতিটি ফাইল সম্পূর্ণ করা হয়েছে এবং কম্প্রেসড ফাইলের মধ্যে লেখা হয়েছে।
File Decompression using ZipInputStream
এখন, আমরা ZipInputStream ব্যবহার করে একটি কম্প্রেসড ফাইল থেকে ডেটা এক্সট্র্যাক্ট করার উদাহরণ দেখব।
import java.io.*;
import java.util.zip.*;
public class FileDecompressionExample {
public static void main(String[] args) {
String zipFile = "compressed.zip"; // কম্প্রেস করা ফাইল
String outputDir = "outputFolder"; // ডি-কম্প্রেস করা ফাইল রাখার ফোল্ডার
// ডি-কম্প্রেস করার জন্য ফোল্ডার তৈরি
new File(outputDir).mkdirs();
try (ZipInputStream zis = new ZipInputStream(new FileInputStream(zipFile))) {
ZipEntry entry;
while ((entry = zis.getNextEntry()) != null) {
File newFile = new File(outputDir, entry.getName());
try (FileOutputStream fos = new FileOutputStream(newFile)) {
byte[] buffer = new byte[1024];
int length;
while ((length = zis.read(buffer)) > 0) {
fos.write(buffer, 0, length);
}
}
zis.closeEntry();
System.out.println("Decompressed: " + entry.getName());
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
ব্যাখ্যা:
ZipInputStreamব্যবহার করে compressed.zip ফাইল থেকে ডেটা এক্সট্র্যাক্ট করা হচ্ছে।getNextEntry()মেথড দ্বারা পরবর্তী ফাইলের উপাদান পড়া হচ্ছে এবং সেই ফাইলটি নির্দিষ্ট ডিরেক্টরিতে ডি-কম্প্রেস করা হচ্ছে।closeEntry()মেথড দ্বারা সেই ফাইলটি বন্ধ করা হচ্ছে।
File Compression এবং Decompression এর সুবিধা:
- Storage Optimization:
- ফাইল কম্প্রেস করে আমরা ডিস্কের জায়গা সাশ্রয় করতে পারি, বিশেষ করে বড় ফাইল বা বড় ডেটা সেটের ক্ষেত্রে।
- Faster Data Transfer:
- কম্প্রেসড ফাইলগুলির আকার ছোট হওয়ায় তারা দ্রুত ট্রান্সফার করা যায়, যা নেটওয়ার্ক ব্যান্ডউইথ সাশ্রয় করে।
- Efficient Backup:
- ফাইলগুলির কম্প্রেসড আর্কাইভ তৈরি করলে তারা সাশ্রয়ীভাবে ব্যাকআপ করা যায় এবং আর্কাইভের ডেটা একত্রে সংরক্ষণ করা সহজ হয়।
- Data Security:
- অনেক সময় encryption এবং compression একত্রে ব্যবহার করা হয়, যাতে ফাইলের সুরক্ষা এবং আকার দুইটিই বজায় থাকে।
- File Compression হল একটি কার্যকর প্রক্রিয়া যা ফাইলের আকার কমিয়ে দেয়, ফলে স্থান সাশ্রয় হয় এবং ডেটা ট্রান্সফার দ্রুত হয়।
- Java I/O প্যাকেজে
ZipInputStreamএবংZipOutputStreamক্লাসগুলি ব্যবহার করে আপনি ফাইল কম্প্রেস এবং ডি-কম্প্রেস করতে পারেন। - এই ক্লাসগুলি ব্যবহার করে text বা binary data সহজেই কম্প্রেস করা যায়, যা সংরক্ষণ, ব্যাকআপ, এবং ডেটা ট্রান্সফারের জন্য অত্যন্ত উপকারী।
Read more