SequenceInputStream ক্লাস Java I/O প্যাকেজের একটি ক্লাস, যা multiple input streams কে একত্রিত (merge) করে একটি একক স্ট্রীমে পরিণত করে। এর মাধ্যমে একাধিক ইনপুট স্ট্রীম থেকে ডেটা ধারাবাহিকভাবে (sequentially) পড়া যায়, অর্থাৎ এক স্ট্রীম থেকে ডেটা পড়ার পর পরবর্তী স্ট্রীম থেকে ডেটা পড়তে সক্ষম।
এটি সাধারণত তখন ব্যবহৃত হয় যখন আপনি একাধিক ফাইল বা ডেটা সোর্স থেকে একসাথে ডেটা পড়তে চান এবং তাদের একটি স্ট্রীম হিসেবে প্রক্রিয়া করতে চান।
SequenceInputStream এর বৈশিষ্ট্য:
- Multiple Input Streams Merging:
- SequenceInputStream একাধিক InputStream (যেমন FileInputStream, ByteArrayInputStream, ইত্যাদি) কে একত্রিত করে একটি একক স্ট্রীমে রূপান্তরিত করে। এটি sequentially প্রতিটি ইনপুট স্ট্রীমের ডেটা পড়ে।
- Memory Efficiency:
- SequenceInputStream একসাথে সব স্ট্রীমে ডেটা লোড না করে, শুধুমাত্র একের পর এক স্ট্রীমে থেকে ডেটা পড়ে।
- Stream Chaining:
- এটি ইনপুট স্ট্রীমগুলির মধ্যে chaining (একটির পর আরেকটি) সম্ভব করে, যা কোডকে আরও পরিষ্কার এবং দ্রুত করে তোলে।
- Closing of Streams:
- SequenceInputStream যেহেতু একাধিক ইনপুট স্ট্রীমে কাজ করে, এটি স্বয়ংক্রিয়ভাবে সকল স্ট্রীম বন্ধ করে দেয় যখন প্রয়োজনীয় ডেটা পড়া শেষ হয়।
SequenceInputStream এর Syntax:
public class SequenceInputStream extends InputStream {
public SequenceInputStream(InputStream first, InputStream second);
public SequenceInputStream(Enumeration<? extends InputStream> e);
public int read();
public int read(byte[] b);
public long skip(long n);
public void close();
}
read(): এটি একটি বাইট পড়ে এবং-1রিটার্ন করে যদি সমস্ত স্ট্রীমে ডেটা শেষ হয়ে যায়।read(byte[] b): এটি একটি বাফারে একাধিক বাইট পড়ে।skip(long n): এটি স্ট্রীমে কিছু বাইট অগ্রসর করে (skip)।close(): এটি সমস্ত ইনপুট স্ট্রীম বন্ধ করে দেয়।
SequenceInputStream উদাহরণ:
Multiple Input Streams থেকে Data Merging Example
এই উদাহরণে আমরা দুটি ফাইলের ডেটা একত্রিত করার জন্য SequenceInputStream ব্যবহার করব। দুটি FileInputStream স্ট্রীমকে একত্রিত করে একটি SequenceInputStream তৈরি করা হবে এবং একসাথে ডেটা পড়া হবে।
import java.io.*;
public class SequenceInputStreamExample {
public static void main(String[] args) {
try {
// দুটি ফাইল ইনপুট স্ট্রীম তৈরি করা
FileInputStream file1 = new FileInputStream("file1.txt");
FileInputStream file2 = new FileInputStream("file2.txt");
// SequenceInputStream ব্যবহার করে দুটি ইনপুট স্ট্রীম একত্রিত করা
SequenceInputStream sequenceInputStream = new SequenceInputStream(file1, file2);
int byteData;
while ((byteData = sequenceInputStream.read()) != -1) {
System.out.print((char) byteData); // বাইটকে ক্যারেক্টারে কনভার্ট করে প্রিন্ট
}
// স্ট্রীম বন্ধ করা
sequenceInputStream.close();
file1.close();
file2.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
ব্যাখ্যা:
- এখানে
SequenceInputStreamদুটিFileInputStreamএকত্রিত করেছে এবং ডেটা sequentially পড়ে প্রিন্ট করছে। - দুটি ফাইলের ডেটা একসাথে পড়া হচ্ছে, প্রথমে file1.txt এবং তারপর file2.txt থেকে।
- শেষে
close()মেথড ব্যবহার করে সমস্ত স্ট্রীম বন্ধ করা হয়েছে।
আউটপুট (যদি file1.txt এবং file2.txt এ কিছু ডেটা থাকে):
Data from file1.txt
Data from file2.txt
SequenceInputStream এর সুবিধা:
- Multiple Streams Combining:
- একাধিক ইনপুট স্ট্রীম থেকে ডেটা একত্রিত করার জন্য এটি খুবই কার্যকরী।
- Readable and Maintainable:
- কোডকে সহজ এবং readable বানায়, কারণ আপনি একাধিক স্ট্রীমের ডেটাকে একটি স্ট্রীম হিসেবে পড়তে পারেন।
- Memory Efficient:
- একবারে সমস্ত ইনপুট স্ট্রীম মেমরিতে লোড না করে, এটি একে একে স্ট্রীমগুলি থেকে ডেটা পড়ে, ফলে মেমরি ব্যবহারে সুবিধা হয়।
SequenceInputStream এর সীমাবদ্ধতা:
- Only for Sequential Access:
- SequenceInputStream কেবল sequential access সমর্থন করে, অর্থাৎ এক স্ট্রীমের ডেটা পড়ে পরবর্তী স্ট্রীমে যাওয়া হয়। এটি random access সমর্থন করে না।
- Not for Writing:
- এটি শুধুমাত্র ইনপুট স্ট্রীমের জন্য, আউটপুট স্ট্রীমের জন্য
SequenceOutputStreamক্লাসের ব্যবহার করা উচিত।
- এটি শুধুমাত্র ইনপুট স্ট্রীমের জন্য, আউটপুট স্ট্রীমের জন্য
SequenceInputStreamJava I/O প্যাকেজের একটি গুরুত্বপূর্ণ ক্লাস যা একাধিক ইনপুট স্ট্রীম থেকে ডেটা sequentially পড়তে সহায়ক।- এটি multiple file streams বা অন্যান্য ইনপুট সোর্সের ডেটাকে একত্রিত করার জন্য ব্যবহৃত হয় এবং performance উন্নত করতে সহায়ক।
SequenceInputStreamক্লাসটি বিভিন্ন স্ট্রীমের ডেটা একসাথে প্রক্রিয়া করতে কার্যকরী এবং সহজ।
এটি বড় ডেটা সংগ্রহ এবং প্রসেসিংয়ে memory ব্যবহারের ক্ষেত্রে উপকারী, কারণ এটি প্রতিটি স্ট্রীম থেকে ধাপে ধাপে ডেটা পড়ে।