FilterInputStream এবং FilterOutputStream হল Java I/O প্যাকেজের ক্লাস যা স্ট্রীমের উপর filtering কার্যক্রম পরিচালনা করতে ব্যবহৃত হয়। এই ক্লাসগুলি মূলত অন্য ইনপুট এবং আউটপুট স্ট্রীমগুলির উপর filtering করতে সাহায্য করে, যেমন data compression, encryption, বা modifying data।
FilterInputStream: এটি InputStream এর একটি সাবক্লাস যা ইনপুট স্ট্রীমে কিছু filtering কার্যক্রম সম্পাদন করার জন্য ব্যবহৃত হয়।FilterOutputStream: এটি OutputStream এর একটি সাবক্লাস যা আউটপুট স্ট্রীমে কিছু filtering কার্যক্রম সম্পাদন করার জন্য ব্যবহৃত হয়।
এই দুটি ক্লাসের মাধ্যমে, আমরা ডেটা প্রসেসিং এর জন্য সহজেই filter তৈরি করতে পারি।
FilterInputStream এবং FilterOutputStream এর ধারণা:
FilterInputStream:
FilterInputStreamইনপুট স্ট্রীমের জন্য একটি সাধারণ ক্লাস, যা কোনো ইনপুট স্ট্রীমের উপর filtering যোগ করার জন্য ব্যবহৃত হয়। এই ক্লাসটি read() মেথডের মাধ্যমে ডেটা পড়ে এবং পূর্ববর্তীInputStreamএর কার্যকারিতা সংরক্ষণ করে।BufferedInputStreamএবংDataInputStreamহলো FilterInputStream এর কিছু সাধারণ সাবক্লাস।
FilterOutputStream:
FilterOutputStreamআউটপুট স্ট্রীমের জন্য ব্যবহৃত হয়। এটি আউটপুট স্ট্রীমে filtering প্রক্রিয়া যোগ করতে সহায়ক। write() মেথডের মাধ্যমে ডেটা আউটপুট স্ট্রীমে লেখার আগে এটি ফিল্টারিং কার্যক্রম করতে পারে।BufferedOutputStreamএবংDataOutputStreamহলো FilterOutputStream এর কিছু সাধারণ সাবক্লাস।
এই ক্লাসগুলো মূলত I/O filter streams তৈরি করতে ব্যবহৃত হয় যা আপনার ডেটা প্রসেসিং এর জন্য অনেক বেশি নমনীয়তা প্রদান করে।
FilterInputStream এবং FilterOutputStream এর ব্যবহার:
1. FilterInputStream উদাহরণ (যেমন, DataInputStream)
DataInputStream হল FilterInputStream এর একটি উদাহরণ যা primitive data types (যেমন int, float, double, long, char, boolean) পড়তে ব্যবহৃত হয়।
import java.io.*;
public class DataInputStreamExample {
public static void main(String[] args) {
// ডেটা লেখার জন্য ফাইল তৈরি
try (DataOutputStream dos = new DataOutputStream(new FileOutputStream("data.dat"))) {
dos.writeInt(123);
dos.writeDouble(3.1415);
dos.writeUTF("Hello, Java!");
} catch (IOException e) {
e.printStackTrace();
}
// DataInputStream ব্যবহার করে ডেটা পড়া
try (DataInputStream dis = new DataInputStream(new FileInputStream("data.dat"))) {
int intValue = dis.readInt();
double doubleValue = dis.readDouble();
String stringValue = dis.readUTF();
System.out.println("Integer: " + intValue);
System.out.println("Double: " + doubleValue);
System.out.println("String: " + stringValue);
} catch (IOException e) {
e.printStackTrace();
}
}
}
ব্যাখ্যা:
- প্রথমে
DataOutputStreamব্যবহার করে primitive types ফাইলdata.dat-এ লেখা হয়েছে। - তারপর
DataInputStreamব্যবহার করে সেই ফাইল থেকে ডেটা পড়া হয়েছে। DataInputStreamএকটি FilterInputStream ক্লাস যা ফাইলের মধ্যে primitive data types পড়তে ব্যবহৃত হয়।
আউটপুট:
Integer: 123
Double: 3.1415
String: Hello, Java!
2. FilterOutputStream উদাহরণ (যেমন, DataOutputStream)
DataOutputStream হল FilterOutputStream এর একটি উদাহরণ যা primitive data types (যেমন int, float, double, long, char, boolean) লেখার জন্য ব্যবহৃত হয়।
import java.io.*;
public class DataOutputStreamExample {
public static void main(String[] args) {
// DataOutputStream ব্যবহার করে ডেটা লেখা
try (DataOutputStream dos = new DataOutputStream(new FileOutputStream("output.dat"))) {
dos.writeInt(12345);
dos.writeDouble(9876.54321);
dos.writeUTF("Hello from Java!");
} catch (IOException e) {
e.printStackTrace();
}
// লেখা ডেটা পড়ার জন্য DataInputStream ব্যবহার
try (DataInputStream dis = new DataInputStream(new FileInputStream("output.dat"))) {
int intValue = dis.readInt();
double doubleValue = dis.readDouble();
String stringValue = dis.readUTF();
System.out.println("Integer: " + intValue);
System.out.println("Double: " + doubleValue);
System.out.println("String: " + stringValue);
} catch (IOException e) {
e.printStackTrace();
}
}
}
ব্যাখ্যা:
DataOutputStreamদ্বারা primitive data types (যেমন,int,double,String)output.datফাইলে লেখা হয়েছে।- পরে
DataInputStreamদ্বারা সেই ফাইল থেকে ডেটা পড়ে primitive types পুনরুদ্ধার করা হয়েছে।
আউটপুট:
Integer: 12345
Double: 9876.54321
String: Hello from Java!
FilterInputStream এবং FilterOutputStream এর সুবিধা:
- Data Processing:
- FilterInputStream এবং FilterOutputStream ব্যবহার করে ডেটার ওপর filtering প্রক্রিয়া যোগ করা সম্ভব, যেমন ডেটা encryption বা compression।
- Primitive Data Handling:
- DataInputStream এবং DataOutputStream ক্লাসগুলি primitive types পড়া এবং লেখা সহজ করে।
- Efficient Data Writing/Reading:
- BufferedInputStream এবং BufferedOutputStream এর মতো সাবক্লাসগুলির মাধ্যমে buffering ব্যবহার করে I/O অপারেশনগুলি দ্রুত করা যায়।
- Modular Design:
- আপনি সহজেই আপনার কাস্টম I/O filter তৈরি করতে পারেন। যেমন encryption, compression, বা অন্য কোন ধরণের ডেটা প্রক্রিয়াকরণ।
FilterInputStream এবং FilterOutputStream এর সীমাবদ্ধতা:
- Memory Consumption:
- buffering ব্যবহার করলে কিছু পরিমাণ মেমরি খরচ হতে পারে। তবে, এটি সাধারণত বৃহৎ ডেটা সেটের জন্য কার্যকরী।
- Character Streams:
- FilterInputStream এবং FilterOutputStream শুধুমাত্র byte-based স্ট্রীমের জন্য ব্যবহৃত হয়। Character Streams এর জন্য Reader/Writer ক্লাসগুলি ব্যবহৃত হয়।
- No Built-in Compression/Encryption:
- FilterInputStream এবং FilterOutputStream স্বয়ংক্রিয়ভাবে ডেটা compression বা encryption পরিচালনা করে না, তবে আপনি নিজে এই ধরনের কার্যক্রম custom filter হিসেবে তৈরি করতে পারেন।
- FilterInputStream এবং FilterOutputStream হল Java I/O প্যাকেজের ক্লাস যা filtering অপারেশন করার জন্য ব্যবহৃত হয়।
DataInputStreamএবংDataOutputStreamএর মতো সাবক্লাসগুলি ডেটা পড়া এবং লেখার জন্য ব্যবহৃত হয়, বিশেষ করে primitive types এর জন্য।BufferedInputStreamএবংBufferedOutputStreamদ্বারা buffering করা হয়, যা I/O অপারেশনগুলিকে আরও দ্রুত করে।
এই ক্লাসগুলির মাধ্যমে, আপনি I/O অপারেশনে filtering, buffering, এবং data processing এর জন্য অত্যন্ত কার্যকরী এবং নমনীয় সিস্টেম তৈরি করতে পারেন।