Compression Level হল সেই পরিমাণ কম্প্রেশন যা একটি ফাইল বা ডেটার আর্কাইভ/কম্প্রেশন প্রক্রিয়ায় প্রয়োগ করা হয়। এটি একটি নির্দিষ্ট মান যা নির্ধারণ করে যে একটি ফাইল কতটা সঙ্কুচিত (compressed) হবে। সাধারণত, কম্প্রেশন লেভেল একটি স্কেল বা পরিসরে থাকে, যেখানে একটি উচ্চ লেভেল বেশি কম্প্রেশন এবং একটি কম লেভেল কম কম্প্রেশন প্রদান করে।
Java তে ZIP ফাইল কম্প্রেশন করার সময় Java java.util.zip প্যাকেজ এ Deflater ক্লাস ব্যবহার করে কম্প্রেশন লেভেল সেট করা হয়। Compression Level সাধারণত 0 থেকে 9 এর মধ্যে থাকে, যেখানে:
- 0 মানে No Compression (কোনো কম্প্রেশন হবে না)
- 9 মানে Maximum Compression (সর্বাধিক কম্প্রেশন)
Compression Level এর প্রভাব
1. ফাইল সাইজ
- উচ্চ কম্প্রেশন (High Compression): যখন আপনি কম্প্রেশন লেভেল বেশি (যেমন 9) ব্যবহার করেন, তখন ফাইলটি আরও সঙ্কুচিত হয় এবং এর সাইজ কমে যায়। এটি সাধারণত সময় নেয় এবং CPU বেশি ব্যবহার করে।
- নিম্ন কম্প্রেশন (Low Compression): কম্প্রেশন লেভেল কম (যেমন 1 বা 2) দিলে ফাইলটি কম সঙ্কুচিত হয় এবং এর আকার বেশি থাকবে। এটি দ্রুত সম্পন্ন হয় এবং CPU কম ব্যবহার হয়।
2. প্রক্রিয়া সময় (Processing Time)
- উচ্চ কম্প্রেশন (High Compression): কম্প্রেশন প্রক্রিয়া করতে বেশি সময় নেবে, কারণ এতে ডেটার অ্যালগরিদমের মাধ্যমে আরও বেশি সঙ্কুচিত হতে হয়।
- নিম্ন কম্প্রেশন (Low Compression): কম্প্রেশন প্রক্রিয়া দ্রুত হবে, কারণ এতে কম সঙ্কুচিত করতে হয় এবং কম ক্যালকুলেশন প্রয়োজন।
3. CPU Usage
- উচ্চ কম্প্রেশন (High Compression): CPU এর বেশি ব্যবহার হয়, কারণ এটি ডেটা আরও সঙ্কুচিত করতে অনেক বেশি গণনা এবং অ্যালগরিদম প্রয়োগ করে।
- নিম্ন কম্প্রেশন (Low Compression): CPU এর কম ব্যবহার হবে, কারণ কম কম্প্রেশন আলগোরিদমে কম গণনা করতে হয়।
4. Data Integrity and Quality
- কম্প্রেশন লেভেলের পরিবর্তন ডেটার অখণ্ডতা বা গুণগত মানকে প্রভাবিত করে না, কারণ এটি কেবলমাত্র ডেটাকে সঙ্কুচিত করে (আর্কাইভ করে) এবং তার পরে পুনরুদ্ধার করা হয় (extract) একই ডেটা হিসেবে।
Java তে Compression Level সেট করা
Java তে Deflater ক্লাস ব্যবহার করে আপনি কম্প্রেশন লেভেল সেট করতে পারেন। Deflater ক্লাসে বিভিন্ন কম্প্রেশন লেভেল রয়েছে, যেমন:
Deflater.NO_COMPRESSION(0): কোনো কম্প্রেশন করা হবে না।Deflater.BEST_SPEED(1): দ্রুততম কম্প্রেশন (কম কম্প্রেশন)।Deflater.BEST_COMPRESSION(9): সর্বোচ্চ কম্প্রেশন (বেশি কম্প্রেশন)।Deflater.DEFAULT_COMPRESSION(5): সাধারণ বা ডিফল্ট কম্প্রেশন।
Compression Level সেট করার উদাহরণ:
import java.io.*;
import java.util.zip.*;
public class CompressionExample {
public static void main(String[] args) {
String data = "This is the text data that we will compress using Java's Deflater.";
try (ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
DeflaterOutputStream deflaterOutputStream = new DeflaterOutputStream(byteArrayOutputStream, new Deflater(Deflater.BEST_COMPRESSION))) {
// ডেটা লিখুন
deflaterOutputStream.write(data.getBytes());
deflaterOutputStream.finish();
byte[] compressedData = byteArrayOutputStream.toByteArray();
System.out.println("Compressed data size: " + compressedData.length);
// কম্প্রেসড ডেটা থেকে ডিকম্প্রেস
try (ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(compressedData);
InflaterInputStream inflaterInputStream = new InflaterInputStream(byteArrayInputStream)) {
// ডিকম্প্রেস করা ডেটা পড়ুন
StringBuilder sb = new StringBuilder();
int b;
while ((b = inflaterInputStream.read()) != -1) {
sb.append((char) b);
}
System.out.println("Decompressed data: " + sb.toString());
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
উপরের কোড ব্যাখ্যা:
- DeflaterOutputStream: এটি
Deflaterক্লাসের সাথে একটি আউটপুট স্ট্রিম যা ডেটাকে কম্প্রেস করে। - Compression Level:
Deflater.BEST_COMPRESSIONব্যবহার করে সর্বোচ্চ কম্প্রেশন লেভেল সেট করা হয়েছে, যেটি ডেটাকে যতটা সম্ভব সঙ্কুচিত করবে। - InflaterInputStream: এটি কম্প্রেসড ডেটাকে আবার ডিকম্প্রেস করার জন্য ব্যবহার করা হয়।
- Data Size: কম্প্রেসড ডেটার সাইজ এবং ডিকম্প্রেস করা ডেটা প্রিন্ট করা হয়েছে।
Compression Level এর প্রভাব
- 0 (No Compression): ডেটা তেমন কম্প্রেস হবে না, আর্কাইভের সাইজ বেশি হবে, কিন্তু দ্রুত সম্পন্ন হবে।
- 1 (Best Speed): কম্প্রেশন দ্রুত হবে, তবে আর্কাইভের সাইজ তুলনামূলকভাবে বেশি হবে।
- 9 (Best Compression): সাইজ সবচেয়ে ছোট হবে, তবে প্রক্রিয়া ধীর হবে এবং CPU বেশি ব্যবহার হবে।
- Compression Level হলো একটি সেটিং যা ফাইল বা ডেটা কতটা সঙ্কুচিত হবে তা নির্ধারণ করে। এটি কম্প্রেশন এবং প্রসেসিং টাইমের মধ্যে একটি ট্রেড-অফ তৈরি করে। আপনি যখন Java তে কম্প্রেশন লেভেল সেট করেন, তখন আপনাকে সিদ্ধান্ত নিতে হবে যে আপনি ফাইল সাইজ কমাতে চান নাকি প্রক্রিয়া দ্রুত সম্পন্ন করতে চান।
- ফাইল সাইজ কমাতে সর্বোচ্চ কম্প্রেশন এবং দ্রুত কম্প্রেশন এর জন্য কম লেভেল ব্যবহার করুন, কিন্তু মনে রাখবেন যে এর ফলে CPU ব্যবহারের পরিমাণ এবং প্রসেসিং টাইমের মধ্যে পার্থক্য থাকবে।
Read more