SequenceInputStream একটি Java I/O ক্লাস যা multiple InputStream একত্রিত (merge) করে একটি একক স্ট্রিমে রূপান্তরিত করে। এটি বিভিন্ন InputStream থেকে ডেটা পড়ে এবং সেই ডেটা একটি ধারাবাহিক (sequential) স্ট্রিমে পাঠায়। এটি সাধারণত একাধিক ফাইল বা উৎস থেকে ডেটা একত্রে পড়ার জন্য ব্যবহৃত হয়।
SequenceInputStream দ্বারা বিভিন্ন ইনপুট স্ট্রিমের ডেটা একত্রিত করে একটি একক স্ট্রিমে পাঠানো যায়, যা ডেটার মার্জিং (merging) প্রক্রিয়া। এই ক্লাসটি দুটি বা তার বেশি InputStream কে একত্রে স্ট্রিমে রূপান্তরিত করে, যাতে একের পর এক তাদের ডেটা পড়া যায়।
SequenceInputStream এর ভূমিকা
- ডেটার মার্জিং: একাধিক স্ট্রিমের ডেটা একত্রে পড়তে পারে, অর্থাৎ একাধিক ফাইল বা ইনপুট সোর্স থেকে ডেটা পড়ার জন্য এটি ব্যবহার করা হয়।
- বহু উৎস থেকে ডেটা পড়া: একাধিক ফাইল বা অন্যান্য উৎসের ডেটা sequentialভাবে পড়া।
- স্ট্রিমের একত্রিত করা: এটি দুটি বা তার বেশি
InputStreamকে একত্রে একক স্ট্রিমে মার্জ করে।
SequenceInputStream এর মেথড:
| মেথড | বর্ণনা |
|---|---|
read() | স্ট্রিম থেকে পরবর্তী বাইট পড়ে। |
read(byte[] b) | একটি বাফারে একাধিক বাইট পড়ে। |
close() | স্ট্রিমটি বন্ধ করে। |
mark(int readlimit) | স্ট্রিমের একটি পজিশন মার্ক করে, যাতে পরে তা থেকে ডেটা পড়া যায়। |
reset() | মার্ক করা অবস্থান থেকে পুনরায় পড়া শুরু করে। |
Multiple InputStream এর মাধ্যমে Data Merging Example
SequenceInputStream উদাহরণ:
এই উদাহরণে, দুটি ফাইলের ডেটা একত্রিত করা হচ্ছে। SequenceInputStream ব্যবহার করে দুটি FileInputStream থেকে ডেটা sequentially পড়া হচ্ছে এবং শেষে সেই ডেটা একক আউটপুটে লেখা হচ্ছে।
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.SequenceInputStream;
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);
// আউটপুট ফাইল স্ট্রিম তৈরি
FileOutputStream fos = new FileOutputStream("mergedOutput.txt");
int byteData;
while ((byteData = sequenceInputStream.read()) != -1) {
fos.write(byteData); // merged ডেটা আউটপুটে লেখা
}
// সমস্ত স্ট্রিম বন্ধ করা
sequenceInputStream.close();
fos.close();
System.out.println("Files merged successfully!");
} catch (IOException e) {
e.printStackTrace();
}
}
}
ব্যাখ্যা:
FileInputStreamদুটি ফাইল থেকে ডেটা পড়তে ব্যবহৃত হচ্ছে:file1.txtএবংfile2.txt।SequenceInputStreamদুটি ইনপুট স্ট্রিমকে একত্রিত করে। এর মাধ্যমে একটানা দুই ফাইলের ডেটা পড়া হবে।FileOutputStreamআউটপুট ফাইল হিসেবেmergedOutput.txtফাইল তৈরি করে, যেখানে একত্রিত ডেটা লেখা হবে।
Multiple InputStream এর মাধ্যমে Data Merging এর প্রয়োগ
- একাধিক ফাইলের ডেটা একত্রিত করা: যখন একাধিক ফাইলের কন্টেন্ট একত্রিত করার প্রয়োজন হয়, তখন
SequenceInputStreamখুবই কার্যকরী। - স্ট্রিম মার্জিং: কোনো বড় ডেটা সোর্স থেকে একাধিক অংশের ডেটা পড়তে হলে, যেমন বিভিন্ন নেটওয়ার্ক সেশনের ডেটা বা মেমরি থেকে ডেটা পড়া, তখন
SequenceInputStreamব্যবহার করা যায়। - ডেটা ম্যানিপুলেশন: যখন একাধিক উৎস থেকে ডেটা মার্জ করার পরে এটি প্রসেস করা প্রয়োজন, তখন এই পদ্ধতিটি খুবই উপকারী।
SequenceInputStream এর সুবিধা এবং সীমাবদ্ধতা
সুবিধা:
- সহজ মার্জিং: একাধিক ইনপুট স্ট্রিমকে একত্রিত করার জন্য একটি সহজ এবং সরল উপায়।
- স্বতন্ত্র ইনপুট স্ট্রিমের জন্য নমনীয়তা: এটি একাধিক উৎস থেকে ডেটা পড়তে সাহায্য করে, যেমন একাধিক ফাইল, নেটওয়ার্ক সেশন বা ডেটাবেস।
- ধাপে ধাপে ডেটা পড়া: একাধিক উৎসের ডেটাকে ধারাবাহিকভাবে পড়তে সহায়ক।
সীমাবদ্ধতা:
- বাইনারি ডেটা: যদিও এটি বাইনারি ডেটা ম্যানিপুলেট করতে পারে, তবে এটি কেবল
InputStream(যা byte stream), সুতরাংCharacter Streamsএর মতো ফাইলের টেক্সট ডেটার জন্য উপযুক্ত নয়। - Memory Consumption: যদি অনেক বড় ফাইল একত্রিত করতে হয়, তবে এটি মেমোরি ব্যবহারে সমস্যার সৃষ্টি করতে পারে।
- Only Two Streams:
SequenceInputStreamশুধুমাত্র দুটি ইনপুট স্ট্রিম মার্জ করতে সাহায্য করে। তবে একাধিক স্ট্রিম মার্জ করার জন্য আপনাকে একাধিকSequenceInputStreamবা কাস্টম কোড ব্যবহার করতে হতে পারে।
SequenceInputStreamক্লাসটি একাধিকInputStreamকে মার্জ করার জন্য খুবই কার্যকরী। এটি ডেটা সিকোয়েন্সিয়ালি (ধাপে ধাপে) পড়ে এবং একটি একক স্ট্রিমে রূপান্তরিত করে।- এটি multiple files বা অন্যান্য ইনপুট সোর্সের ডেটা একত্রিত করার জন্য বিশেষভাবে উপযোগী।
- যদিও এটি একাধিক স্ট্রিম মার্জ করতে সাহায্য করে, তবে কিছু সীমাবদ্ধতা রয়েছে যেমন কেবল দুটি স্ট্রিম একত্রিত করা সম্ভব, এবং বাইনারি ডেটা সাপোর্ট করা হয়।
Java Tuples ব্যবহার করে আপনি একত্রিত ডেটার বিভিন্ন প্রপার্টি যেমন ফাইলের নাম, আকার, ইত্যাদি সংরক্ষণ করতে পারেন এবং পরে সেই তথ্য ব্যবহার করতে পারেন।