Buffered Streams Java I/O সিস্টেমের একটি গুরুত্বপূর্ণ অংশ এবং তাদের প্রধান ভূমিকা হলো I/O অপারেশনগুলিকে আরও দ্রুত এবং কার্যকরী করা। যখন ডেটা ফাইল বা অন্য কোনো I/O উৎস থেকে পড়া বা লেখা হয়, তখন যদি প্রতি বাইটের জন্য একাধিক I/O অপারেশন করতে হয়, তবে কর্মক্ষমতা অনেক কমে যেতে পারে। তাই, Buffered Streams ফাইল বা ডেটা স্ট্রিমে buffering ব্যবহার করে অনেক দ্রুত ডেটা প্রসেসিং নিশ্চিত করে।
Buffered Streams ব্যবহারের প্রধান উদ্দেশ্য হল I/O অপারেশন দ্রুততর করা, কারণ এটি একবারে একাধিক বাইট মেমোরিতে রাখে এবং সেগুলি স্ট্রিমে পড়ে বা লেখে। Buffered Streams এর মাধ্যমে disk access কম করা হয় এবং ডেটার ব্যাচ প্রসেসিং সম্ভব হয়।
Buffered Streams এর প্রয়োজনীয়তা:
- পারফরম্যান্স বৃদ্ধি:
- Buffered Streams ডেটা পড়া বা লেখার সময় memory buffering ব্যবহার করে, যা একে একে একাধিক বাইট পড়তে বা লিখতে সক্ষম হয়। এর ফলে কম I/O অপারেশন হয় এবং কর্মক্ষমতা বৃদ্ধি পায়।
- কম I/O অপারেশন:
- যখন Byte Streams বা Character Streams এ Buffered Streams যোগ করা হয়, তখন একাধিক ছোট I/O অপারেশন বদলে একটি বড় I/O অপারেশন করা হয়, যা ডিস্ক অ্যাক্সেস কমিয়ে দেয় এবং কার্যক্ষমতা বাড়ায়।
- ফাইল এবং ডেটা হ্যান্ডলিং:
- Buffered Streams বড় ফাইল বা ডেটাসেটের ক্ষেত্রে বিশেষভাবে কার্যকরী, যেখানে ডেটা একসাথে পড়া বা লেখা প্রয়োজন।
- অপারেশন গতি বৃদ্ধি:
- Buffered Streams disk read/write অপারেশনগুলিকে batch mode-এ পরিচালনা করতে সহায়ক, যা একে একে একটি একটি ডেটা পড়ে বা লেখার পরিবর্তে একাধিক বাইট একসাথে প্রসেস করতে সহায়ক।
- দ্রুত ফাইল কপি:
- Buffered Streams ফাইল কপি করার সময় ডেটা একবারে batch-wise পড়ে এবং লেখা হয়, যার ফলে কপি অপারেশন অনেক দ্রুত হয়।
- System Resources Optimization:
- Buffered Streams কম মেমরি ব্যবহার করে দ্রুত ডেটা পড়তে বা লেখতে সক্ষম, যা disk I/O অপারেশনগুলির জন্য উপকারী।
Buffered Streams এর কাজের প্রক্রিয়া:
Buffered Streams যখন ব্যবহৃত হয়, তখন তারা একটি buffer (যা সাধারণত একটি অ্যারে) তৈরি করে, যেখানে কিছু পরিমাণ ডেটা সঞ্চিত থাকে। এই বাফারটি স্ট্রিমে ডেটা পাঠানোর জন্য প্রস্তুত থাকে এবং একে একে disk access থেকে ডেটা পড়ে বা লেখে।
- BufferedReader এবং BufferedWriter টেক্সট ডেটার জন্য Character Streams হিসাবে কাজ করে।
- BufferedInputStream এবং BufferedOutputStream বাইনারি ডেটার জন্য Byte Streams হিসাবে কাজ করে।
Buffered Streams সাধারণত নিম্নলিখিত উপায়ে কাজ করে:
- BufferedReader: এটি ফাইলের লাইনগুলো দ্রুত পড়তে সাহায্য করে।
- BufferedWriter: এটি ফাইলের মধ্যে দ্রুত ডেটা লেখার জন্য ব্যবহৃত হয়।
- BufferedInputStream: বাইনারি ডেটা পড়ে দ্রুততা বৃদ্ধি করার জন্য ব্যবহৃত হয়।
- BufferedOutputStream: বাইনারি ডেটা লিখতে দ্রুততা বৃদ্ধি করার জন্য ব্যবহৃত হয়।
Buffered Streams এর উদাহরণ
BufferedReader এবং BufferedWriter উদাহরণ
এই উদাহরণে, BufferedReader এবং BufferedWriter ব্যবহার করা হয়েছে যা ফাইল থেকে দ্রুত ডেটা পড়া এবং লেখার জন্য উপযুক্ত।
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
public class BufferedStreamExample {
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 BufferedStreams.");
} catch (IOException e) {
e.printStackTrace();
}
}
}
ব্যাখ্যা:
- BufferedReader ফাইল থেকে প্রতিটি লাইন পড়ে এবং BufferedWriter ফাইলে সেই লাইনটি লিখে।
newLine()মেথড ব্যবহার করে নতুন লাইন যোগ করা হয়েছে।
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 BufferedBinaryCopy {
public static void main(String[] args) {
try (BufferedInputStream bis = new BufferedInputStream(new FileInputStream("source.dat"));
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("destination.dat"))) {
int byteData;
while ((byteData = bis.read()) != -1) { // ফাইল থেকে বাইনারি ডেটা পড়া
bos.write(byteData); // destination ফাইলে বাইনারি ডেটা লেখা
}
System.out.println("Binary file copied successfully using Buffered Streams.");
} catch (IOException e) {
e.printStackTrace();
}
}
}
ব্যাখ্যা:
- BufferedInputStream ফাইল থেকে বাইনারি ডেটা পড়ে এবং BufferedOutputStream গন্তব্যে সেই ডেটা লেখে।
- এই স্ট্রিমগুলির মাধ্যমে disk I/O অপারেশনগুলি batch-wise দ্রুত হয়।
Buffered Streams এর সুবিধা এবং সীমাবদ্ধতা
সুবিধা:
- পারফরম্যান্স বৃদ্ধি: কম I/O অপারেশন করার মাধ্যমে দ্রুত ডেটা পড়া এবং লেখা সম্ভব।
- ফাইলের আকার কম হওয়া: ছোট ছোট ডেটা ব্লক পড়ার পরিবর্তে একবারে অনেক ডেটা একত্রে পড়া ও লেখা যায়।
- লম্বা ফাইলের জন্য কার্যকর: বড় ফাইল বা ডেটাসেটের জন্য Buffered Streams বেশি কার্যকরী।
- কম ডিস্ক অ্যাক্সেস: Buffered Streams ডিস্ক অ্যাক্সেসের পরিমাণ কমিয়ে দেয়, যার ফলে কর্মক্ষমতা বৃদ্ধি পায়।
সীমাবদ্ধতা:
- মেমোরি ব্যবহার: যখন অনেক বড় ফাইলের সাথে কাজ করা হয়, তখন এটি বেশি মেমোরি ব্যবহার করতে পারে।
- non-blocking I/O: যদি non-blocking I/O প্রয়োজন হয়, তবে এটি কিছুটা সীমাবদ্ধ হতে পারে।
- small files এর জন্য অতিরিক্ত কমপ্লেক্সিটি: ছোট ফাইলের ক্ষেত্রে Buffered Streams ব্যবহারের মাধ্যমে অতিরিক্ত জটিলতা তৈরি হতে পারে।
Buffered Streams Java I/O সিস্টেমে গুরুত্বপূর্ণ ভূমিকা পালন করে এবং I/O অপারেশন গুলি দ্রুত এবং কার্যকরী করে তোলে। BufferedReader, BufferedWriter, BufferedInputStream, এবং BufferedOutputStream ব্যবহারের মাধ্যমে ডেটা একত্রে batch-wise পড়া এবং লেখা যায়, যা disk I/O অপারেশনগুলির কার্যক্ষমতা বাড়ায়। Buffered Streams বৃহৎ ফাইল এবং ডেটা সিস্টেমে কার্যকরী হলেও ছোট ফাইলের জন্য অতিরিক্ত জটিলতা তৈরি করতে পারে।
Read more