FilterInputStream এবং FilterOutputStream হল Java I/O ক্লাস যা InputStream এবং OutputStream এর উপরে ফিল্টারিং ফিচার প্রদান করে। এগুলি decorator pattern এর মতো কাজ করে, যেখানে মূল স্ট্রিমের উপর অতিরিক্ত কার্যক্ষমতা যোগ করা হয়। এই ক্লাসগুলো বিশেষভাবে ব্যবহৃত হয় যখন আপনি স্ট্রিমের ডেটা প্রসেস করার সময় অতিরিক্ত কার্যাবলী যেমন ডেটা এনক্রিপশন, কমপ্রেশন, বা ডেটা ম্যানিপুলেশন করতে চান।
FilterInputStream এর ভূমিকা
FilterInputStream হল InputStream এর একটি সাবক্লাস যা ডেটার প্রবাহে ফিল্টারিং করতে ব্যবহৃত হয়। এটি মূলত এক বা একাধিক InputStream এর উপর অতিরিক্ত প্রক্রিয়া বা ফিল্টার অপারেশন করতে ব্যবহৃত হয়।
FilterInputStream এর মেথড:
read(): একটি বাইট পড়ে।read(byte[] b): একাধিক বাইট পড়ে।close(): স্ট্রিম বন্ধ করে।
FilterInputStream এর উদাহরণ:
import java.io.FilterInputStream;
import java.io.FileInputStream;
import java.io.IOException;
public class UpperCaseFilterInputStream extends FilterInputStream {
public UpperCaseFilterInputStream(FileInputStream in) {
super(in);
}
@Override
public int read() throws IOException {
int data = super.read();
if (data == -1) {
return -1; // End of stream
}
// Convert to uppercase if the character is lower case
return Character.toUpperCase((char) data);
}
public static void main(String[] args) {
try (FileInputStream fis = new FileInputStream("input.txt");
UpperCaseFilterInputStream ucfis = new UpperCaseFilterInputStream(fis)) {
int data;
while ((data = ucfis.read()) != -1) {
System.out.print((char) data); // Print upper case content from file
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
ব্যাখ্যা:
- এখানে
UpperCaseFilterInputStreamএকটি কাস্টম ফিল্টার ইনপুট স্ট্রিম তৈরি করা হয়েছে যা ফাইলের সমস্ত ছোট অক্ষরকে বড় অক্ষরে রূপান্তর করবে। FilterInputStreamএর মাধ্যমেFileInputStreamএর উপর একটি ফিল্টার যোগ করা হয়েছে।
আউটপুট:
HELLO WORLD!
FilterOutputStream এর ভূমিকা
FilterOutputStream হল OutputStream এর একটি সাবক্লাস যা আউটপুট স্ট্রিমে ডেটার উপর অতিরিক্ত প্রক্রিয়া বা ফিল্টারিং করতে ব্যবহৃত হয়। এটি মূলত OutputStream এর উপর ফিল্টার যোগ করে।
FilterOutputStream এর মেথড:
write(int b): একটি বাইট লেখে।write(byte[] b): একাধিক বাইট লেখে।close(): স্ট্রিম বন্ধ করে।
FilterOutputStream এর উদাহরণ:
import java.io.FilterOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class ReverseFilterOutputStream extends FilterOutputStream {
public ReverseFilterOutputStream(FileOutputStream out) {
super(out);
}
@Override
public void write(int b) throws IOException {
super.write(~b); // Write the inverted byte to output stream
}
public static void main(String[] args) {
try (FileOutputStream fos = new FileOutputStream("output.txt");
ReverseFilterOutputStream rfos = new ReverseFilterOutputStream(fos)) {
String data = "Hello, Java!";
for (int i = 0; i < data.length(); i++) {
rfos.write(data.charAt(i)); // Write reversed byte to output file
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
ব্যাখ্যা:
- এখানে
ReverseFilterOutputStreamএকটি কাস্টম ফিল্টার আউটপুট স্ট্রিম তৈরি করা হয়েছে যা প্রতিটি বাইটের ইনভার্টেড মান ফাইলের মধ্যে লেখে। FilterOutputStreamএর মাধ্যমেFileOutputStreamএর উপর একটি ফিল্টার যোগ করা হয়েছে।
ফলস্বরূপ ফাইল output.txt এর মধ্যে ডেটা ইনভার্টেড ফর্মে লেখা হবে।
FilterInputStream এবং FilterOutputStream এর মধ্যে পার্থক্য
| বিষয় | FilterInputStream | FilterOutputStream |
|---|---|---|
| প্রকার | এটি InputStream এর উপর একটি ফিল্টার অপারেশন। | এটি OutputStream এর উপর একটি ফিল্টার অপারেশন। |
| ব্যবহার | ডেটা পড়ার সময় ফিল্টার বা প্রক্রিয়া করার জন্য। | ডেটা লেখার সময় ফিল্টার বা প্রক্রিয়া করার জন্য। |
| এটা কী করে | ইনপুট ডেটা ফিল্টার করে বা প্রক্রিয়া করে, যেমন টেক্সট বা বাইনারি। | আউটপুট ডেটা ফিল্টার করে বা প্রক্রিয়া করে, যেমন টেক্সট বা বাইনারি। |
| উদাহরণ | ক্যারেক্টার ক্যাপিটালাইজ করার জন্য বা ডেটা প্রক্রিয়া করার জন্য। | ডেটা ইনভার্ট বা ফরম্যাট করা। |
FilterInputStream এবং FilterOutputStream এর সুবিধা
- Customization: আপনি চাইলে ইনপুট এবং আউটপুট স্ট্রিমে কাস্টম ফিল্টারিং করতে পারেন।
- Data Transformation: স্ট্রিমের মাধ্যমে ডেটার মান পরিবর্তন বা রূপান্তর করার ক্ষমতা (যেমন এনক্রিপশন বা ডিক্রিপশন)।
- Efficient Data Processing: একাধিক স্ট্রিমে একই ধরনের ডেটা ফিল্টার বা প্রক্রিয়া করার সুবিধা।
FilterInputStream এবং FilterOutputStream এর সীমাবদ্ধতা
- Performance Overhead: অতিরিক্ত ফিল্টারিং অপারেশন অ্যাড করার ফলে কর্মক্ষমতা কিছুটা হ্রাস পেতে পারে।
- Limited Scope: এই ক্লাসগুলো শুধুমাত্র ইনপুট এবং আউটপুট স্ট্রিমের উপর প্রক্রিয়া করতে পারে এবং ফাইল বা স্ট্রিমের অন্যান্য উন্নত কার্যাবলীর জন্য আলাদা কনফিগারেশন বা কাস্টম ক্লাস প্রয়োজন।
FilterInputStreamএবংFilterOutputStreamস্ট্রিমের ডেটা প্রক্রিয়া এবং ফিল্টারিং করার জন্য খুবই কার্যকরী ক্লাস।- এগুলি I/O স্ট্রিমের উপর অতিরিক্ত কার্যক্রম যোগ করে, যেমন ডেটা এনক্রিপশন, ডিক্রিপশন, বা সাধারণ ফরম্যাটিং।
- এই ক্লাসগুলির মাধ্যমে আপনি সহজে আপনার ডেটা প্রসেসিংয়ের প্রয়োজনীয় ফিল্টারিং বা রূপান্তর করতে পারেন।
Tuples ব্যবহার করে ফাইলের নাম, আকার, অথবা ডেটা স্ট্রিমের অন্যান্য প্রপার্টি সংরক্ষণ এবং পরিচালনা করতে পারেন, যা আপনাকে ডেটা প্রক্রিয়া এবং স্টোরেজ ব্যবস্থাপনায় আরও সহায়ক হতে পারে।