Buffered Streams Java I/O সিস্টেমে একটি গুরুত্বপূর্ণ ভূমিকা পালন করে। যখন আমরা large data পড়া বা লেখা করি, তখন এটি কাজের গতি অনেক কমিয়ে দেয়। তাই, Buffered Streams এই ধরনের সিস্টেমে কর্মক্ষমতা বৃদ্ধি করার জন্য ব্যবহৃত হয়। Buffered I/O কম্পিউটার মেমোরিতে ডেটার একটি ব্যাচ (batch) ধরে রেখে ডেটা পড়ে বা লেখে, যার ফলে ফাইল I/O অপারেশনে পর্ফরম্যান্স বৃদ্ধি পায়।
Buffered Streams ব্যবহার করার মাধ্যমে I/O অপারেশন দ্রুত সম্পন্ন হয় কারণ তারা মেমোরিতে ডেটা সঞ্চয় করে রেখে স্ট্রিমের মাধ্যমে বাফার্ডভাবে পড়া এবং লেখা সম্পাদন করে।
Buffered Streams এর ভূমিকা
- Buffered Streams সাধারণত
BufferedInputStreamএবংBufferedOutputStreamএর মতো Byte Streams এবংBufferedReaderএবংBufferedWriterএর মতো Character Streams হিসেবে পাওয়া যায়। - তারা I/O অপারেশন এর গতি বৃদ্ধি করার জন্য memory buffering ব্যবহার করে, যার ফলে কম I/O অপারেশন করার প্রয়োজন হয় এবং ডেটা একসাথে batch-wise পড়ে বা লেখা হয়।
Buffered Streams এর প্রধান সুবিধা:
- পারফরম্যান্স বৃদ্ধি: কম I/O অপারেশন করা হয়, কারণ মেমোরি থেকে একবারে অনেক ডেটা পড়ে বা লেখা হয়।
- কম I/O অপারেশন: ছোট ছোট ডেটা ব্লক পড়ে লেখার পরিবর্তে, বড় ডেটা ব্লক মেমোরি থেকে প্রক্রিয়া করা হয়।
- নমনীয়তা: আপনি Byte Streams এবং Character Streams উভয় ক্ষেত্রেই Buffered Streams ব্যবহার করতে পারেন।
Buffered Streams এর উদাহরণ
১. BufferedInputStream এবং BufferedOutputStream উদাহরণ
BufferedInputStream এবং BufferedOutputStream বাইনারি ফাইল পড়া এবং লেখার জন্য ব্যবহৃত হয়। এই ক্লাসগুলি ফাইল থেকে ডেটা দ্রুত পড়তে এবং লিখতে সাহায্য করে।
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class BufferedStreamExample {
public static void main(String[] args) {
// BufferedInputStream এবং BufferedOutputStream ব্যবহার করে ফাইল কপি
try (BufferedInputStream bis = new BufferedInputStream(new FileInputStream("source.txt"));
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("destination.txt"))) {
int byteData;
while ((byteData = bis.read()) != -1) { // ফাইল থেকে ডেটা পড়া
bos.write(byteData); // destination ফাইলে ডেটা লেখা
}
System.out.println("File copied using Buffered Streams.");
} catch (IOException e) {
e.printStackTrace();
}
}
}
ব্যাখ্যা:
- এখানে
BufferedInputStreamএবংBufferedOutputStreamব্যবহার করা হয়েছে, যা source.txt ফাইল থেকে ডেটা পড়ে এবং destination.txt ফাইলে সেই ডেটা লিখে। - এই স্ট্রিমগুলি ডেটা বাফার করে রেখে দ্রুত পড়া এবং লেখা নিশ্চিত করে।
২. BufferedReader এবং BufferedWriter উদাহরণ
BufferedReader এবং BufferedWriter টেক্সট ফাইল পড়া এবং লেখার জন্য ব্যবহৃত হয়। এই ক্লাসগুলি টেক্সট ফাইলের সাথে দ্রুত কাজ করতে সাহায্য করে।
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
public class BufferedReaderWriterExample {
public static void main(String[] args) {
// BufferedReader ব্যবহার করে ফাইল থেকে টেক্সট পড়া
try (BufferedReader br = new BufferedReader(new FileReader("input.txt"));
BufferedWriter bw = new BufferedWriter(new FileWriter("output.txt"))) {
String line;
while ((line = br.readLine()) != null) { // ফাইল থেকে টেক্সট পড়া
bw.write(line); // output ফাইলে টেক্সট লেখা
bw.newLine(); // নতুন লাইন যোগ করা
}
System.out.println("Data copied from input.txt to output.txt using BufferedReader and BufferedWriter.");
} catch (IOException e) {
e.printStackTrace();
}
}
}
ব্যাখ্যা:
- BufferedReader ব্যবহার করে input.txt ফাইল থেকে এক লাইনে একে একে ডেটা পড়া হচ্ছে এবং BufferedWriter ব্যবহার করে output.txt ফাইলে সেই ডেটা লেখা হচ্ছে।
- BufferedWriter এ
newLine()মেথডের মাধ্যমে নতুন লাইনও যোগ করা হয়েছে।
Efficient I/O Handling Techniques:
Buffered Streams এর মাধ্যমে ডেটা পড়া এবং লেখা দ্রুত করা যায়, তবে আরও কিছু I/O Handling Techniques আছে, যেগুলি Java NIO এবং Java Streams API ব্যবহার করে ডেটা প্রসেসিংকে আরও কার্যকরী এবং দ্রুত করতে সাহায্য করে:
- Memory Mapped Files (NIO):
- Memory Mapped Files ব্যবহার করে বড় ফাইলগুলোকে মেমোরিতে ম্যাপ করা যায় এবং দ্রুত প্রসেস করা যায়। এটি NIO (New I/O) এর একটি অংশ এবং বড় ডেটাসেট প্রসেসিংয়ের জন্য কার্যকর।
- Asynchronous I/O:
- Asynchronous I/O বা Non-blocking I/O অপারেশন ব্যবহার করে একাধিক I/O অপারেশন একসাথে করতে পারেন। এটি সিস্টেমের পারফরম্যান্স উন্নত করে।
- Parallel Streams:
- Java Streams API ব্যবহার করে parallel streams তৈরি করতে পারেন, যা বড় ডেটাসেটের জন্য কার্যকর। এটি ডেটা প্রক্রিয়া করতে একাধিক থ্রেড ব্যবহার করে।
Buffered Streams এর সুবিধা এবং সীমাবদ্ধতা
সুবিধা:
- পারফরম্যান্স বৃদ্ধি: স্ট্রিমগুলোকে বাফার করে ডেটা পড়া এবং লেখা দ্রুত হয়।
- কম I/O অপারেশন: কম I/O অপারেশন হওয়ার ফলে ডিস্ক অ্যাক্সেস এর প্রয়োজন কম হয়।
- Large Data Handling: বড় ফাইলের সাথে কাজ করা সহজ এবং দ্রুত হয়।
সীমাবদ্ধতা:
- Memory Usage: যদি আপনি অনেক বড় ফাইল প্রক্রিয়া করেন, তবে এটি অতিরিক্ত মেমোরি ব্যবহার করতে পারে।
- Blocking: Blocking I/O পদ্ধতিতে কাজ করার সময় Non-blocking I/O এর তুলনায় গতি কম হতে পারে।
Buffered Streams ব্যবহার করে আপনি I/O অপারেশনগুলিকে দ্রুত এবং কার্যকরী করতে পারেন। এটি file I/O বা network I/O-তে ব্যবহৃত হতে পারে যেখানে একাধিক ডেটা দ্রুত প্রসেস করার প্রয়োজন হয়। BufferedReader, BufferedWriter, BufferedInputStream, এবং BufferedOutputStream ক্লাসগুলি Java I/O সিস্টেমে ব্যবহৃত হয়, যা memory buffering ব্যবহার করে I/O অপারেশনকে আরও কার্যকরী এবং দ্রুত করে তোলে।
এছাড়াও, Java NIO এবং parallel streams ইত্যাদি ব্যবহার করে আরও উন্নত I/O অপারেশন করা যায়, যা ডেটা প্রসেসিংয়ের গতি ও কার্যকারিতা উন্নত করে।
Read more