BufferedInputStream এবং BufferedOutputStream হলো Java I/O API-এর ক্লাস যা input এবং output স্ট্রিমের জন্য বাফারিং প্রদান করে। বাফারিং পদ্ধতি ডেটা স্ট্রিমে ডেটা পড়া এবং লেখার গতি দ্রুততর করে, কারণ এটি সরাসরি ডিস্কে লেখার পরিবর্তে একটি অস্থায়ী বাফার বা স্টোরেজ ব্যবহার করে।
BufferedInputStream এবং BufferedOutputStream এর ভূমিকা
- BufferedInputStream: এই ক্লাসটি একটি বাফার ব্যবহার করে ফাইল বা স্ট্রিম থেকে ডেটা পড়ার জন্য। এটি ডিস্কে প্রতি বার ডেটা পাঠানোর পরিবর্তে ডেটা একটি বাফারে সংরক্ষণ করে, এবং বাফার পূর্ণ হলে সেটি ডিস্কে লেখে।
- BufferedOutputStream: এই ক্লাসটি একটি বাফার ব্যবহার করে ফাইল বা স্ট্রিমে ডেটা লেখার জন্য। এটি ডিস্কে প্রতি বার ডেটা লেখার পরিবর্তে একটি অস্থায়ী বাফারে ডেটা জমা রাখে এবং বাফার পূর্ণ হলে সেটি ডিস্কে লেখে।
এই দুটি ক্লাস I/O অপারেশনকে আরও কার্যকর এবং দ্রুত করে, বিশেষ করে যখন অনেক পরিমাণে ডেটা পড়া বা লেখা হয়।
BufferedInputStream
- BufferedInputStream ক্লাস ফাইল বা স্ট্রিম থেকে ডেটা পড়ার জন্য ব্যবহৃত হয়।
- এটি একটি বাফার প্রদান করে যা ডিস্ক থেকে একে একে ডেটা পড়ার পরিবর্তে দ্রুতগতিতে ডেটা পড়ে।
কোড উদাহরণ:
import java.io.*;
public class BufferedInputStreamExample {
public static void main(String[] args) {
try (BufferedInputStream bis = new BufferedInputStream(new FileInputStream("example.txt"))) {
int data;
// ফাইল থেকে ডেটা পড়া
while ((data = bis.read()) != -1) {
System.out.print((char) data); // ফাইলের বিষয়বস্তু আউটপুট করা
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
ব্যাখ্যা:
- এখানে
BufferedInputStreamব্যবহার করে"example.txt"ফাইল থেকে ডেটা পড়া হয়েছে। read()মেথড ব্যবহার করে একে একে ফাইলের প্রতিটি বাইট পড়ে পরবর্তী লাইন প্রিন্ট করা হয়েছে।
BufferedOutputStream
- BufferedOutputStream ক্লাস ফাইল বা স্ট্রিমে ডেটা লেখার জন্য ব্যবহৃত হয়।
- এটি একটি বাফার ব্যবহার করে ডেটা লেখে এবং যখন বাফার পূর্ণ হয় তখন সেই ডেটা ডিস্কে লেখে, ফলে I/O অপারেশন দ্রুত হয়।
কোড উদাহরণ:
import java.io.*;
public class BufferedOutputStreamExample {
public static void main(String[] args) {
String data = "Hello, this is a test message written to a file using BufferedOutputStream!";
try (BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("output.txt"))) {
// ফাইল লেখার জন্য ডেটা
bos.write(data.getBytes());
System.out.println("Data written to file successfully.");
} catch (IOException e) {
e.printStackTrace();
}
}
}
ব্যাখ্যা:
BufferedOutputStreamব্যবহার করে"output.txt"ফাইলে একটি টেক্সট লেখার প্রক্রিয়া করা হয়েছে।write()মেথড ব্যবহার করে বাইটে ডেটা লিখে এটি একটি ফাইলে সংরক্ষণ করা হয়েছে।
BufferedInputStream এবং BufferedOutputStream এর সুবিধা
- Performance Improvement:
- স্ট্রিম I/O অপারেশনকে দ্রুততর করতে buffering ব্যবহার করা হয়। ডেটা একবারে ছোট ছোট অংশে না পাঠিয়ে একটি বড় বাফারে জমা করা হয় এবং তারপর একবারে পাঠানো হয়।
- Reduced I/O Operations:
- BufferedStream ক্লাস স্ট্রিমের মাধ্যমে I/O অপারেশন কমিয়ে আনে। ডিস্কে একে একে ডেটা পাঠানোর পরিবর্তে এটি একটি বাফারে ডেটা সংরক্ষণ করে, যাতে আরো কার্যকরভাবে ডিস্কে লেখা হয়।
- Efficient Memory Use:
- BufferedInputStream এবং BufferedOutputStream ক্লাস ফাইলের buffer size ব্যবহার করে স্ট্রিমের I/O অপারেশনকে আরও দ্রুত এবং কার্যকর করে।
- Convenience:
- Buffered Streams সাধারণ স্ট্রিমের সাথে ব্যবহৃত হলে, আরও উচ্চ কর্মক্ষমতা অর্জন করা যায় এবং কোড সহজ হয়।
BufferedInputStream এবং BufferedOutputStream এর সীমাবদ্ধতা
- Memory Usage:
- বাফার ব্যবহার করার জন্য কিছু অতিরিক্ত মেমরি প্রয়োজন হতে পারে। যদি বাফারের আকার বড় হয়, তাহলে মেমরি খরচও বাড়তে পারে।
- Not Suitable for Small Files:
- যদি ফাইল ছোট হয়, তাহলে বাফারিংয়ের মাধ্যমে কোনো উল্লেখযোগ্য কর্মক্ষমতা উন্নতি না ঘটতে পারে। এমন ক্ষেত্রে, স্ট্রিমের সরাসরি ব্যবহার করা ভালো হতে পারে।
- Buffered Streams Only for Byte-Oriented Data:
- Buffered Streams শুধুমাত্র byte-oriented data (যেমন ইমেজ, অডিও, ভিডিও) পড়তে এবং লিখতে উপযুক্ত। টেক্সট ডেটার জন্য BufferedReader এবং BufferedWriter শ্রেষ্ঠ।
BufferedInputStream এবং BufferedOutputStream ব্যবহারের ক্ষেত্রে সর্বোত্তম অভ্যাস
- Close Streams Properly:
- স্ট্রিম ব্যবহারের পরে সেগুলি সঠিকভাবে বন্ধ করতে হবে। তাই
try-with-resourcesব্লক ব্যবহার করে স্ট্রিম বন্ধ করা শ্রেয়।
- স্ট্রিম ব্যবহারের পরে সেগুলি সঠিকভাবে বন্ধ করতে হবে। তাই
- Buffer Size Optimization:
- স্ট্রিমের জন্য বাফারের আকার সঠিকভাবে নির্বাচন করতে হবে। সাধারণত, 8KB থেকে 64KB এর মধ্যে বাফার সাইজ নির্বাচন করা হয়।
- Use Buffered Streams for Large Files:
- বড় ফাইলের জন্য
BufferedInputStreamএবংBufferedOutputStreamব্যবহার করলে কর্মক্ষমতা আরও বৃদ্ধি পায়।
- বড় ফাইলের জন্য
- BufferedInputStream এবং BufferedOutputStream ক্লাসগুলো I/O অপারেশনগুলোর গতি বাড়াতে এবং মেমরি ব্যবহারে দক্ষতা আনতে সাহায্য করে।
- Buffered Streams ব্যবহার করে ফাইলের ডেটা পড়া এবং লেখা দ্রুত এবং কার্যকরভাবে করা যায়, বিশেষ করে বড় ডেটা সেটের জন্য।
Content added By
Read more