Java I/O (Input/Output) প্যাকেজের মধ্যে Stream একটি মৌলিক ধারণা, যা ডেটার প্রবাহ (flow) কে নিয়ন্ত্রণ করে। Stream হল এক ধরনের চ্যানেল, যার মাধ্যমে প্রোগ্রাম ডেটা পড়তে এবং লিখতে পারে। Stream ব্যবহারের মাধ্যমে ফাইল, কনসোলে ডেটা পাঠানো বা গ্রহণ করা সম্ভব হয়।
Stream এর ধারণা:
স্ট্রিম হল এমন একটি সিকোয়েন্স বা ধারাবাহিক ডেটা, যা এক স্থান থেকে অন্য স্থানে ট্রান্সফার হয়। স্ট্রিম সাধারণত Input এবং Output এ বিভক্ত হয়:
- Input Stream: ডেটা পড়ার জন্য ব্যবহৃত হয়।
- Output Stream: ডেটা লেখার জন্য ব্যবহৃত হয়।
স্ট্রিমের মাধ্যমে ডেটা byte-by-byte বা character-by-character ভাবে ট্রান্সফার হতে পারে, এবং এই ট্রান্সফার sequential (ধাপে ধাপে) হয়।
Stream এর প্রকার:
Byte Streams:
- Byte Streams হল বাইনারি ডেটা (যেমন ইমেজ, অডিও, ভিডিও ফাইল) পরিচালনার জন্য ব্যবহৃত। এগুলি 8-বিট বাইট আকারে ডেটা পড়ে বা লেখে।
- Byte Streams এর প্রধান ক্লাস:
InputStream: বাইট ইনপুট পড়তে ব্যবহৃত।OutputStream: বাইট আউটপুট লেখার জন্য ব্যবহৃত।
উদাহরণ:
- FileInputStream, FileOutputStream ইত্যাদি।
Character Streams:
- Character Streams টেক্সট ডেটা পরিচালনার জন্য ব্যবহৃত হয়। এই স্ট্রিমগুলি 16-বিট ইউনিকোড ক্যারেক্টার ভিত্তিক ডেটা পড়তে এবং লেখতে সাহায্য করে।
- Character Streams এর প্রধান ক্লাস:
Reader: ক্যারেক্টার ইনপুট পড়তে ব্যবহৃত।Writer: ক্যারেক্টার আউটপুট লেখার জন্য ব্যবহৃত।
উদাহরণ:
- FileReader, FileWriter ইত্যাদি।
Stream এর ভূমিকা:
স্ট্রিম Java I/O অপারেশনগুলির জন্য এক গুরুত্বপূর্ণ অংশ, কারণ:
- ডেটার প্রবাহ পরিচালনা করতে সাহায্য করে।
- স্ট্রিম ব্যবহারের মাধ্যমে ফাইল বা নেটওয়ার্ক থেকে ডেটা পড়া এবং লেখা যায়।
- স্ট্রিমগুলি আউটপুট বা ইনপুট ডেটা একে একে পড়ে বা লেখে, যা Memory Management এবং Performance উন্নত করতে সহায়ক।
- File handling (ফাইল পরিচালনা), network communication (নেটওয়ার্ক যোগাযোগ) এবং data processing (ডেটা প্রক্রিয়াকরণ) এর ক্ষেত্রে স্ট্রিম গুরুত্বপূর্ণ ভূমিকা পালন করে।
Stream এর প্রধান সুবিধা:
- I/O অপারেশন সহজ করা:
- স্ট্রিম ব্যবহার করে, বিভিন্ন ফাইল বা নেটওয়ার্ক সোর্স থেকে ডেটা পড়া এবং লেখার কাজ খুব সহজে করা যায়।
- মেমরি সাশ্রয়ী:
- স্ট্রিমগুলি সাধারণত নির্দিষ্ট পরিমাণ ডেটা পড়ে বা লেখে, তাই এটি মেমরির অপচয় কমিয়ে দেয় এবং large data-র সাথে কাজ করতে সক্ষম।
- ফাংশনাল স্টাইল:
- Java Streams API ফাংশনাল প্রোগ্রামিংয়ের ধারণার উপর ভিত্তি করে কাজ করে এবং আপনাকে functional operations প্রয়োগ করতে দেয় যেমন
map(),filter(),reduce()ইত্যাদি।
- Java Streams API ফাংশনাল প্রোগ্রামিংয়ের ধারণার উপর ভিত্তি করে কাজ করে এবং আপনাকে functional operations প্রয়োগ করতে দেয় যেমন
- দ্রুত ডেটা প্রক্রিয়াকরণ:
- Buffered Streams এবং NIO Streams আরও উন্নত এবং দ্রুত I/O অপারেশন নিশ্চিত করে, যা high-performance I/O প্রয়োজনীয়তায় সাহায্য করে।
Stream এর উদাহরণ:
1. FileInputStream (Byte Stream Example)
import java.io.FileInputStream;
import java.io.IOException;
public class ByteStreamExample {
public static void main(String[] args) {
try (FileInputStream fis = new FileInputStream("input.txt")) {
int byteData;
while ((byteData = fis.read()) != -1) { // ফাইল থেকে বাইট পড়া
System.out.print((char) byteData); // বাইটকে ক্যারেক্টারে কনভার্ট করে প্রিন্ট
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
ব্যাখ্যা:
- এখানে
FileInputStreamব্যবহার করে একটি টেক্সট ফাইল থেকে বাইট আকারে ডেটা পড়া হচ্ছে।
2. FileReader (Character Stream Example)
import java.io.FileReader;
import java.io.IOException;
public class CharacterStreamExample {
public static void main(String[] args) {
try (FileReader fr = new FileReader("input.txt")) {
int charData;
while ((charData = fr.read()) != -1) { // ফাইল থেকে ক্যারেক্টার পড়া
System.out.print((char) charData); // ক্যারেক্টার প্রিন্ট করা
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
ব্যাখ্যা:
- এখানে
FileReaderব্যবহার করা হয়েছে যা টেক্সট ফাইল থেকে character stream আকারে ডেটা পড়ে।
3. FileOutputStream (Byte Stream Example)
import java.io.FileOutputStream;
import java.io.IOException;
public class ByteStreamWriteExample {
public static void main(String[] args) {
try (FileOutputStream fos = new FileOutputStream("output.txt")) {
String data = "Hello, Java I/O!";
fos.write(data.getBytes()); // স্ট্রিংটিকে বাইটে রূপান্তর করে ফাইলে লেখা
System.out.println("Data written to output.txt");
} catch (IOException e) {
e.printStackTrace();
}
}
}
ব্যাখ্যা:
- এখানে
FileOutputStreamব্যবহার করে একটি স্ট্রিংকে বাইট স্ট্রিম আকারে output.txt ফাইলে লেখা হচ্ছে।
Stream এর শ্রেণী:
- Byte Stream (Byte Streams):
- ডেটা বাইনারি আকারে (যেমন ইমেজ, অডিও, ভিডিও) প্রক্রিয়া করে। এই স্ট্রিমগুলি 8-বিট আকারে ডেটা ট্রান্সফার করে।
- ক্লাস:
FileInputStream,FileOutputStream,BufferedInputStream,BufferedOutputStream,DataInputStream,DataOutputStream, ইত্যাদি।
- Character Stream (Character Streams):
- ডেটা ক্যারেক্টার আকারে (যেমন টেক্সট ডেটা) প্রক্রিয়া করে। এই স্ট্রিমগুলি 16-বিট ইউনিকোড ক্যারেক্টার ভিত্তিক ডেটা ট্রান্সফার করে।
- ক্লাস:
FileReader,FileWriter,BufferedReader,BufferedWriter,PrintWriter, ইত্যাদি।
- Stream Java I/O সিস্টেমের একটি গুরুত্বপূর্ণ অংশ যা ডেটা পড়া এবং লেখার জন্য ব্যবহৃত হয়। Byte Stream এবং Character Stream দুটি ভিন্ন ধরনের স্ট্রিমের মাধ্যমে binary এবং text ডেটা পড়া এবং লেখা সম্ভব।
- স্ট্রিম ব্যবহার করলে Memory Efficiency এবং Performance বাড়ে, বিশেষত যখন আপনি বড় ফাইল বা ডেটা সেট নিয়ে কাজ করছেন।
- Buffered Streams এবং Java NIO আরও দ্রুত I/O অপারেশন করতে সহায়ক, যা মাল্টিথ্রেডেড অ্যাপ্লিকেশনের জন্য উপকারী হতে পারে।
Read more