Buffered Streams হল Java I/O প্যাকেজের অংশ যা performance optimization এর জন্য ব্যবহৃত হয়। BufferedReader, BufferedWriter, BufferedInputStream, এবং BufferedOutputStream ক্লাসগুলি buffering ব্যবহার করে input/output অপারেশনগুলি দ্রুত এবং আরও কার্যকরী করতে সহায়ক।
Buffered Streams সাধারণত character বা byte streams-এর মাধ্যমে ডেটা পড়া এবং লেখা করতে ব্যবহৃত হয়। এগুলি ডেটাকে buffer করে, এবং একে একে ডেটা পাঠানোর পরিবর্তে অনেক ডেটা একসাথে পাঠানোর মাধ্যমে I/O অপারেশনকে দ্রুত করে।
Buffered Streams এর মূল ধারণা
- BufferedReader এবং BufferedWriter সাধারণত টেক্সট ডেটা (Character Streams) এর জন্য ব্যবহৃত হয়।
- BufferedInputStream এবং BufferedOutputStream বাইনারি ডেটা (Byte Streams) পড়তে এবং লিখতে ব্যবহৃত হয়।
এগুলি I/O অপারেশনগুলির মধ্যে ব্যবধান কমাতে সহায়ক। যখন আপনি অনেক ডেটা পড়েন বা লেখেন, তখন এই স্ট্রিমগুলি ডেটাকে এক্সটার্নাল স্টোরেজ বা নেটওয়ার্কে পাঠানোর জন্য কিছুটা buffer ব্যবহার করে, যার ফলে এটি দ্রুততর হয়।
Buffered Streams এর সুবিধা
- Speed Optimization: স্ট্রিমের মধ্যে ডেটা পড়া এবং লেখা দ্রুত করতে সাহায্য করে।
- Efficiency: Buffering এর মাধ্যমে I/O অপারেশনগুলির জন্য কম CPU এবং সময় ব্যবহার করা হয়।
- Ease of Use: BufferedWriter এবং BufferedReader ইন্টারফেসগুলি ডেটা লেখার এবং পড়ার ক্ষেত্রে আরও সহজ এবং দ্রুত।
- Large File Handling: বড় আকারের ফাইলের জন্য Buffered Streams কার্যকর, কারণ তারা কম সময়ে ডেটা প্রক্রিয়া করে।
Buffered Streams উদাহরণ
১. BufferedReader এবং BufferedWriter এর মাধ্যমে ফাইল পড়া এবং লেখা
এখানে আমরা BufferedReader এবং BufferedWriter ব্যবহার করে একটি ফাইল থেকে টেক্সট পড়ব এবং অন্য ফাইলে লিখব।
import java.io.*;
public class BufferedReaderWriterExample {
public static void main(String[] args) {
String inputFile = "input.txt"; // ইনপুট ফাইলের নাম
String outputFile = "output.txt"; // আউটপুট ফাইলের নাম
// BufferedReader ব্যবহার করে ফাইল পড়া এবং BufferedWriter ব্যবহার করে ফাইল লেখা
try (BufferedReader reader = new BufferedReader(new FileReader(inputFile));
BufferedWriter writer = new BufferedWriter(new FileWriter(outputFile))) {
String line;
while ((line = reader.readLine()) != null) {
writer.write(line);
writer.newLine(); // প্রতি লাইনের পর একটি নতুন লাইন যোগ করা
}
System.out.println("File content copied successfully!");
} catch (IOException e) {
e.printStackTrace();
}
}
}
ব্যাখ্যা:
BufferedReaderব্যবহার করে ইনপুট ফাইলের প্রতিটি লাইন পড়া হচ্ছে।BufferedWriterব্যবহার করে আউটপুট ফাইলে সেই লাইন লেখা হচ্ছে।newLine()মেথড দ্বারা নতুন লাইনের যোগ করা হচ্ছে।
আউটপুট:
File content copied successfully!
২. BufferedInputStream এবং BufferedOutputStream এর মাধ্যমে ফাইল পড়া এবং লেখা
এখানে BufferedInputStream এবং BufferedOutputStream ব্যবহার করে একটি বাইনারি ফাইল থেকে ডেটা পড়ব এবং অন্য ফাইলে লিখব।
import java.io.*;
public class BufferedInputOutputStreamExample {
public static void main(String[] args) {
String inputFile = "input.dat"; // ইনপুট বাইনারি ফাইল
String outputFile = "output.dat"; // আউটপুট বাইনারি ফাইল
// BufferedInputStream এবং BufferedOutputStream ব্যবহার করে ফাইল পড়া এবং লেখা
try (BufferedInputStream bis = new BufferedInputStream(new FileInputStream(inputFile));
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(outputFile))) {
int byteData;
while ((byteData = bis.read()) != -1) {
bos.write(byteData);
}
System.out.println("Binary file copied successfully!");
} catch (IOException e) {
e.printStackTrace();
}
}
}
ব্যাখ্যা:
- BufferedInputStream ব্যবহার করে ইনপুট ফাইল থেকে বাইনারি ডেটা পড়া হচ্ছে।
- BufferedOutputStream ব্যবহার করে আউটপুট ফাইলে বাইনারি ডেটা লেখা হচ্ছে।
আউটপুট:
Binary file copied successfully!
Buffered Streams এর Performance
Buffered Streams দ্রুত I/O অপারেশন নিশ্চিত করার জন্য বড় আকারের ডেটা ব্লক পাঠায় এবং পড়ে। ছোট ছোট ডেটা একে একে পাঠানোর পরিবর্তে এটি একটি বাফারে ডেটা সংগ্রহ করে এবং একটি batch operation হিসেবে কাজ করে।
Performance Comparison
Non-buffered Stream:
import java.io.*;
public class NonBufferedExample {
public static void main(String[] args) {
try (FileReader reader = new FileReader("largeFile.txt")) {
int data;
while ((data = reader.read()) != -1) {
System.out.print((char) data);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
Buffered Stream:
import java.io.*;
public class BufferedExample {
public static void main(String[] args) {
try (BufferedReader reader = new BufferedReader(new FileReader("largeFile.txt"))) {
String line;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
ব্যাখ্যা:
- BufferedReader ব্যবহার করে readLine() এর মাধ্যমে পুরো ফাইলটি দ্রুত পড়া হচ্ছে।
- এই কোডটি non-buffered stream থেকে অনেক দ্রুত কাজ করবে কারণ এটি একসাথে অনেক ডেটা পড়ে।
- Buffered Streams ব্যবহার করার মাধ্যমে ফাইলের পড়া এবং লেখার পারফর্মেন্স অনেক উন্নত হয়।
- BufferedReader এবং BufferedWriter টেক্সট ডেটার জন্য এবং BufferedInputStream এবং BufferedOutputStream বাইনারি ডেটার জন্য ব্যবহার করা হয়।
- Buffered Streams আপনার কোডকে দ্রুত এবং বেশি কার্যকরী করে তোলে, বিশেষ করে যখন বড় আকারের ফাইল বা ডেটার সাথে কাজ করতে হয়।
Read more