ZipInputStream Java তে একটি স্ট্রিমিং API যা ZIP ফাইলের মধ্যে থাকা এন্ট্রির ডেটা পড়তে ব্যবহৃত হয়। এটি java.util.zip প্যাকেজের অংশ এবং ZIP ফাইলের বিভিন্ন ফাইল বা ডিরেক্টরি থেকে ডেটা বের করার জন্য ব্যবহৃত হয়। ZipInputStream এ তিনটি প্রধান মেথড রয়েছে যা ZIP ফাইলের এন্ট্রিগুলি প্রসেস করার জন্য গুরুত্বপূর্ণ:
getNextEntry():- কাজ: এই মেথডটি ZIP ফাইলের পরবর্তী এন্ট্রির (ফাইল বা ডিরেক্টরি) প্রতি পয়েন্টার সরিয়ে দেয় এবং সেই এন্ট্রির তথ্য ফিরিয়ে দেয়। এটি পরবর্তী এন্ট্রি পাওয়ার জন্য ব্যবহার করা হয়।
- ফিরিয়ে দেয়:
ZipEntryঅবজেক্ট, যা বর্তমান এন্ট্রির নাম, সাইজ, কম্প্রেশন মেথড এবং অন্যান্য মেটাডেটা ধারণ করে। - নোট:
getNextEntry()কখনোnullফিরিয়ে দিতে পারে যদি ZIP ফাইলে আর কোনো এন্ট্রি না থাকে।
উদাহরণ:
ZipEntry entry; while ((entry = zis.getNextEntry()) != null) { System.out.println("Entry Name: " + entry.getName()); }read(byte[] b):- কাজ: এই মেথডটি
ZipInputStreamথেকে ডেটা পড়ে এবং এটি একটি বাইট অ্যারে হিসেবে ফিরিয়ে দেয়। - ফিরিয়ে দেয়: এটি একটি
intমান ফিরিয়ে দেয়, যা পড়া বাইটের সংখ্যা নির্দেশ করে (এটি 0 হতে পারে যদি কোনো বাইট না পড়া হয়)। - নোট:
read()মেথডের মাধ্যমে আপনি ZIP এন্ট্রির ভিতরের ডেটা ধারাবাহিকভাবে পড়তে পারেন। সাধারণত, এটি একাধিকবার কল করা হয় যতক্ষণ না পুরো এন্ট্রির ডেটা পড়া হয়।
উদাহরণ:
byte[] buffer = new byte[1024]; int bytesRead; while ((bytesRead = zis.read(buffer)) != -1) { System.out.write(buffer, 0, bytesRead); }- কাজ: এই মেথডটি
closeEntry():- কাজ: এই মেথডটি বর্তমান ZIP এন্ট্রি বন্ধ করে এবং পরবর্তী এন্ট্রি পড়ার জন্য প্রস্তুত করে।
- ফিরিয়ে দেয়: এটি কোনো কিছু ফিরিয়ে দেয় না, তবে ZIP স্ট্রিমে এক এন্ট্রি প্রক্রিয়া শেষে অন্য এন্ট্রি শুরু করার জন্য এটি ব্যবহার করা হয়।
- নোট: এই মেথডটি
getNextEntry()অথবাread()এর পরে ব্যবহৃত হয়। যখন একটি ZIP এন্ট্রির সমস্ত ডেটা পড়া হয়, তখনcloseEntry()কল করা উচিত।
উদাহরণ:
zis.closeEntry(); // Close the current entry after processing it
ZipInputStream এর মেথডসমূহের ব্যাখ্যা:
getNextEntry():- কাজ: এটি ZIP ফাইলের পরবর্তী এন্ট্রি নির্বাচন করে, যার মধ্যে ফাইল বা ডিরেক্টরি থাকে। আপনি এই মেথডটি ব্যবহার করে ফাইলের মধ্যে সন্নিবেশিত প্রতিটি এন্ট্রির নাম এবং মেটাডেটা বের করতে পারেন।
- ব্যবহার:
getNextEntry()এর মাধ্যমে আপনি ZIP ফাইলের প্রতিটি এন্ট্রি একে একে পড়তে পারেন, এবং যখন একটির ডেটা সম্পূর্ণভাবে পড়ে ফেলা হয়, তখন পরবর্তী এন্ট্রি পড়তে পারেন।
read(byte[] b):- কাজ: এটি ZIP ফাইলের ভিতরে সংরক্ষিত ডেটা পড়তে ব্যবহৃত হয় এবং একটি বাইট অ্যারে ফিরিয়ে দেয়। এই মেথডটি এক বা একাধিক বার ব্যবহার করা হয় যতক্ষণ না আপনি একটি পুরো এন্ট্রির ডেটা পড়ে ফেলেন।
- ব্যবহার: এই মেথডের মাধ্যমে আপনি ZIP এন্ট্রি থেকে ডেটা পড়তে পারবেন এবং সেই ডেটা পরবর্তী প্রসেসিং বা লেখার জন্য ব্যবহার করতে পারবেন।
closeEntry():- কাজ: এটি ZIP স্ট্রিমে একটি নির্দিষ্ট এন্ট্রি বন্ধ করে, এবং পরবর্তী এন্ট্রি পড়ার জন্য প্রস্তুত হয়।
- ব্যবহার: যখন আপনি একটি এন্ট্রি সম্পূর্ণভাবে প্রসেস বা পড়া শেষ করেন, তখন আপনি
closeEntry()মেথড কল করতে পারেন যাতে পরবর্তী এন্ট্রি পড়া শুরু করা যায়। এটি একটি নির্দিষ্ট এন্ট্রি সম্পূর্ণভাবে বন্ধ করতে ব্যবহৃত হয়।
ZipInputStream এর মেথডসমূহের একটি পূর্ণ উদাহরণ:
import java.util.zip.*;
import java.io.*;
public class ZipInputStreamExample {
public static void main(String[] args) {
try {
// ZIP ফাইল খোলার জন্য স্ট্রিম তৈরি করা
FileInputStream fis = new FileInputStream("example.zip");
ZipInputStream zis = new ZipInputStream(fis);
// প্রতিটি ZIP এন্ট্রি পড়া
ZipEntry entry;
while ((entry = zis.getNextEntry()) != null) {
System.out.println("Entry Name: " + entry.getName());
// যদি এন্ট্রি একটি ফাইল হয়, তবে তার ডেটা পড়া
if (!entry.isDirectory()) {
byte[] buffer = new byte[1024];
int bytesRead;
while ((bytesRead = zis.read(buffer)) != -1) {
System.out.write(buffer, 0, bytesRead); // ডিসপ্লে ডেটা
}
}
zis.closeEntry(); // এন্ট্রি বন্ধ করা
}
zis.close(); // ZIP স্ট্রিম বন্ধ করা
} catch (IOException e) {
e.printStackTrace();
}
}
}
ZipInputStream এর getNextEntry(), read(byte[] b), এবং closeEntry() মেথডসমূহ ZIP ফাইলের মধ্যে থাকা এন্ট্রির ডেটা পড়তে ব্যবহৃত হয়। এগুলি ব্যবহার করে আপনি ZIP ফাইলের প্রতিটি এন্ট্রি একে একে প্রসেস করতে পারেন এবং শেষে সেগুলি বন্ধ করতে পারেন। ZipInputStream এর মাধ্যমে বড় ZIP ফাইলের ডেটা দ্রুত এবং কার্যকরভাবে পড়া সম্ভব হয়, কারণ এটি মেমরি দক্ষ এবং স্ট্রিম ভিত্তিক।
Read more