SequenceInputStream হল Java I/O ক্লাস যা একাধিক ইনপুট স্ট্রিমকে একত্রিত করে একটি স্ট্রিমে ডেটা পড়তে ব্যবহৃত হয়। এটি java.io প্যাকেজের অংশ, এবং এটি বিভিন্ন ইনপুট স্ট্রিমের একটি সিকোয়েন্স (sequence) তৈরি করে, যার মাধ্যমে আপনি একাধিক ইনপুট ফাইল বা সোর্স থেকে ডেটা পড়তে পারেন।
SequenceInputStream সাধারণত দুটি বা ততোধিক ইনপুট স্ট্রিমের ডেটা একত্রে পড়ার জন্য ব্যবহৃত হয়, যাতে তাদের একত্রিত আউটপুট পাওয়া যায়। এটি একটি কমপোজিট স্ট্রিম হিসাবে কাজ করে এবং তারপরে সেগুলিকে একটি স্ট্রিমের মতো পরিচালনা করতে দেয়।
SequenceInputStream এর বৈশিষ্ট্য
- Multiple Streams Joining: এটি একাধিক ইনপুট স্ট্রিমকে একত্রিত করে একটি স্ট্রিম তৈরি করতে ব্যবহৃত হয়।
- Stream Order: এটি ইনপুট স্ট্রিমের সিকোয়েন্স অনুযায়ী ডেটা পড়ে। যখন প্রথম ইনপুট স্ট্রিমের ডেটা শেষ হয়, তখন এটি পরবর্তী স্ট্রিম থেকে ডেটা পড়তে শুরু করে।
- Ease of Use: এটি ম্যানুয়ালি একাধিক স্ট্রিমের ডেটা পড়ার জন্য সহজ উপায় সরবরাহ করে, যাতে একাধিক ফাইল বা সোর্সের ডেটা একসাথে ব্যবহার করা যায়।
SequenceInputStream এর প্রধান মেথড
| মেথড | বর্ণনা |
|---|---|
int read() | একটি বাইট পড়ে এবং রিটার্ন করে। |
int read(byte[] b) | বাফার থেকে একাধিক বাইট পড়ে এবং রিটার্ন করে। |
long skip(long n) | স্ট্রিম থেকে নির্দিষ্ট পরিমাণ বাইট উপেক্ষা (skip) করে। |
void close() | স্ট্রিমটি বন্ধ করে। |
boolean available() | পড়ার জন্য কতটুকু ডেটা এখনও বাকি আছে তা চেক করে। |
SequenceInputStream এর উদাহরণ
একাধিক ইনপুট স্ট্রিম একত্রিত করা
ধরা যাক, আমাদের দুটি ইনপুট ফাইল রয়েছে এবং আমরা তাদের ডেটা একত্রে পড়তে চাই। আমরা SequenceInputStream ব্যবহার করে দুটি ফাইলের ডেটাকে একত্রিত করতে পারি।
কোড উদাহরণ:
import java.io.FileInputStream;
import java.io.IOException;
import java.io.SequenceInputStream;
public class SequenceInputStreamExample {
public static void main(String[] args) {
// দুটি ইনপুট স্ট্রিম তৈরি করা
try (FileInputStream fis1 = new FileInputStream("file1.txt");
FileInputStream fis2 = new FileInputStream("file2.txt");
SequenceInputStream sis = new SequenceInputStream(fis1, fis2)) {
int byteData;
while ((byteData = sis.read()) != -1) { // দুটি স্ট্রিম থেকে একে একে ডেটা পড়া
System.out.print((char) byteData); // পড়া ডেটা কনসোলে প্রিন্ট
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
উদাহরণ ফাইল 1 (file1.txt):
This is the content of file 1.
উদাহরণ ফাইল 2 (file2.txt):
This is the content of file 2.
আউটপুট:
This is the content of file 1.This is the content of file 2.
SequenceInputStream এর সুবিধা
- Multiple Sources Handling: একাধিক ইনপুট স্ট্রিমের ডেটা একত্রে পরিচালনা করা সহজ।
- Stream Combination: স্ট্রিমের বিভিন্ন অংশকে একটি সংযুক্ত স্ট্রিমে পরিণত করার জন্য এটি কার্যকর।
- Convenient for Merging Files: একাধিক ফাইল বা সোর্সের ডেটা একত্রিত করার জন্য উপযুক্ত।
SequenceInputStream এর সীমাবদ্ধতা
- Read Once: একটি স্ট্রিমের ডেটা একবার পড়া হলে, সেই ডেটা পুনরায় পড়া সম্ভব হয় না।
- Limited Flexibility: এতে সীমাবদ্ধভাবে শুধুমাত্র দুটি স্ট্রিম যোগ করা যায় (যদিও
Vectorব্যবহার করে একাধিক স্ট্রিম যোগ করা যেতে পারে)। - Error Handling: একাধিক স্ট্রিম নিয়ে কাজ করার সময় আরও উন্নত error handling প্রয়োজন।
Java Tuples এর সাথে SequenceInputStream ব্যবহার
আপনি Java Tuples ব্যবহার করে SequenceInputStream এর আউটপুট সংরক্ষণ করতে পারেন। উদাহরণস্বরূপ, আপনি SequenceInputStream থেকে পড়া ডেটা এবং স্ট্রিমের অবস্থান Tuple এ সংরক্ষণ করতে পারেন।
কোড উদাহরণ: SequenceInputStream এর আউটপুট Tuple ব্যবহার করে সংরক্ষণ
import java.io.FileInputStream;
import java.io.IOException;
import java.io.SequenceInputStream;
import org.apache.commons.lang3.tuple.Pair;
public class SequenceInputStreamWithTuple {
public static void main(String[] args) {
try (FileInputStream fis1 = new FileInputStream("file1.txt");
FileInputStream fis2 = new FileInputStream("file2.txt");
SequenceInputStream sis = new SequenceInputStream(fis1, fis2)) {
StringBuilder fileContent = new StringBuilder();
int byteData;
while ((byteData = sis.read()) != -1) {
fileContent.append((char) byteData);
}
// Tuple ব্যবহার করে ফাইলের কন্টেন্ট এবং আকার সংরক্ষণ
Pair<String, Integer> fileInfo = new Pair<>(fileContent.toString(), fileContent.length());
System.out.println("File Content: " + fileInfo.getLeft());
System.out.println("File Size: " + fileInfo.getRight() + " characters");
} catch (IOException e) {
e.printStackTrace();
}
}
}
আউটপুট:
File Content: This is the content of file 1.This is the content of file 2.
File Size: 70 characters
SequenceInputStreamJava I/O সিস্টেমে একাধিক ইনপুট স্ট্রিমকে একত্রিত করে একটি স্ট্রিমে ডেটা পড়তে ব্যবহৃত হয়।- এটি বিভিন্ন ফাইল বা ডেটা সোর্স থেকে একত্রিত ডেটা পড়তে সহজ করে তোলে।
- Java Tuples ব্যবহার করে আপনি
SequenceInputStreamথেকে পড়া ডেটা এবং অন্যান্য প্রোপার্টি (যেমন সাইজ, নাম) একত্রে সংরক্ষণ করতে পারেন।
SequenceInputStream একাধিক ইনপুট স্ট্রিমের ডেটা একত্রিত করে পড়ার জন্য একটি শক্তিশালী টুল এবং Java Tuples ব্যবহার করে আপনি এই ডেটাকে আরও কার্যকরভাবে সংরক্ষণ করতে পারেন।