প্রোগ্রামগুলি প্রায়ই একটি ফাইল বা অন্য কোথাও দ্রুত ডেটা লেখার প্রয়োজনীয়তা অন্তর্ভুক্ত করে। এবং এটি প্রশ্ন উত্থাপন করে: আমাদের এটি কীভাবে করা উচিত? আমরা কোন ক্লাস নির্বাচন করা উচিত? আজ আমরা এই ভূমিকার জন্য একজন উপযুক্ত প্রার্থীকে জানব — বাফারড রাইটার ক্লাস।

কেন আমরা BufferedWriter প্রয়োজন?

BufferedWriter হল এমন একটি শ্রেণী যা একটি স্ট্রীমে বাফার করা অক্ষর লেখে। এটি আপনাকে শারীরিক মিডিয়া অ্যাক্সেস করার সংখ্যা কমাতে দেয়। অর্থাৎ, প্রতিবার একটি একক অক্ষর লেখার পরিবর্তে, এটি একটি বাফারে ডেটা লেখে এবং তারপরে একযোগে সমস্ত অক্ষরগুলিকে মিডিয়ামে লেখে।

এটি ব্যাপকভাবে লেখার গতি বাড়ায়। ডিফল্ট বাফার আকার হল 8192 অক্ষর, কিন্তু কনস্ট্রাক্টরে একটি নতুন আকার নির্দিষ্ট করে এটি পরিবর্তন করা যেতে পারে:


BufferedWriter(Writer in, int sz)

এখানে, কনস্ট্রাক্টরের প্রথম আর্গুমেন্ট হল একটি স্ট্রীম যা আমাদের লেখা ডেটা গ্রহণ করবে। এবং দেখা যাচ্ছে যে sz হল নতুন বাফারের আকার।

জাভাতে একটি বাফারডরিডার ক্লাস রয়েছে : এটি ডেটার বাফারড রিডিংয়ের জন্য ব্যবহৃত হয়।

একটি বাফার ঠিক কি? একটি বাস্তব জীবনের উদাহরণ নেওয়া যাক। একটি বাফার একটি সুপারমার্কেটে একটি ঝুড়ি বা শপিং কার্টের মতো। একটি আইটেম নিয়ে চেকআউট পর্যন্ত হাঁটার পরিবর্তে, এটির জন্য অর্থপ্রদান করা, এটি আপনার গাড়ির ট্রাঙ্কে রাখা এবং তারপরে অন্য একটি আইটেমের জন্য ফিরে আসার পরিবর্তে, আমরা একটি শপিং কার্ট নিতে পারি, এতে আমরা যা চাই তা রাখতে পারি এবং তারপরে অর্থ প্রদান করতে পারি চেকআউট এ. এটি ঠিক কীভাবে একটি বাফার কাজ করে: এটি ডেটা সংগ্রহ করে এবং তারপরে প্রতিটি টুকরো আলাদাভাবে লেখার পরিবর্তে সবকিছু নেয় এবং এটি লিখে।

BufferedWriter ক্লাসের কনস্ট্রাক্টর এবং পদ্ধতি

এখন আসুন BufferedWriter ক্লাসটি ঘনিষ্ঠভাবে দেখি । একটি বস্তু তৈরি করার জন্য দুটি কনস্ট্রাক্টর আছে:


public BufferedWriter(Writer out) 
public BufferedWriter(Writer out, int sz)

যেখানে উভয় কনস্ট্রাক্টরের মধ্যে লেখার জন্য স্ট্রীম রয়েছে এবং sz , যেমনটি ইতিমধ্যে উল্লেখ করা হয়েছে, বাফারের আকার।

BufferedWriter ক্লাসেরও বেশ কিছু পদ্ধতি রয়েছে আমরা আজ তাদের কিছু ঘনিষ্ঠভাবে দেখব:

লিখুন(char[] অ্যারে) বাফারে একটি গৃহস্থালি অ্যারে লেখে
লিখুন (স্ট্রিং s, int বন্ধ, int লেন) বাফারে একটি স্ট্রিংয়ের অংশ লেখে
সংযোজন (চার গ) বাফারে একটি অক্ষর লিখুন
যোগ করুন (CharSequence csq, int start, int end) বাফারে একটি অ্যারের অংশ লেখে
নতুন লাইন() একটি লাইন বিভাজক লেখেন
ফ্লাশ() স্রোত ফ্লাশ করে

আসুন একটি প্রোগ্রাম লিখি যা একটি ফাইলের মান লিখবে। জন্যলেখকপ্যারামিটার, আমরা একটি পাস করবফাইল রাইটারকনস্ট্রাক্টরের কাছে। এটি পাঠ্য ফাইলগুলি লিখতে ব্যবহৃত হয় এবং অবজেক্ট শুরু করার জন্য বেশ কয়েকটি কনস্ট্রাক্টর রয়েছে:

FileWriter(ফাইল ফাইল)
FileWriter(ফাইল ফাইল, বুলিয়ান অ্যাপেন্ড)
FileWriter(FileDescriptor fd)
FileWriter(স্ট্রিং ফাইলের নাম)
FileWriter(স্ট্রিং ফাইলের নাম, বুলিয়ান অ্যাপেন্ড)

আমাদের উদাহরণের জন্য, আমরা একটি কনস্ট্রাক্টর ব্যবহার করব যা একটি ফাইলের নাম নেয়:


try(BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter("file.txt"))){
	
	String message = "Hello, Amigo! This is a very important message!";
	bufferedWriter.write(message);
	bufferedWritter.flush();
}
catch(IOException ex){
System.out.println(ex.getMessage());
 }

আমাদের কোড file.txt ফাইলে str লিখতে write(String str) পদ্ধতি ব্যবহার করবে ।

লেখার জন্য অন্যান্য পদ্ধতি আছে:

  • write(char[] array ) — এই বৈকল্পিকটি একটি char অ্যারে গ্রহণ করে এবং লেখে;

  • লিখুন (স্ট্রিং s, int অফ, int লেন) — এই বৈকল্পিকটি একটি স্ট্রিং s নেয় ; একটি অফসেট অফ , যা থেকে লেখা শুরু করার জন্য অক্ষরের সূচক; এবং len , যা লিখতে হবে স্ট্রিং (সাবস্ট্রিং) এর দৈর্ঘ্য।


try(BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter("file.txt"))){
	String message = "Hello, Amigo! This is a very important message!";
	bufferedWriter.write(message, 0, 11);
 	bufferedWriter.flush();

} catch(IOException ex) {
System.out.println(ex.getMessage());
}

এই কোডটি ফাইলটিতে "হ্যালো, অ্যামিগ" লিখবে, যেহেতু আমরা সূচক 0 থেকে শুরু করে 11 টি অক্ষর লিখতে বলেছি।

আমাদের কোডে রিসোর্স ব্লকের সাথে চেষ্টা করে দেখুন:


try(BufferedWriter bufferedWritter = new BufferedWriter(new FileWriter("file.txt"))) 

এর মানে হল যে ক্লোজ() পদ্ধতিটি স্বয়ংক্রিয়ভাবে আমার উপর কল করা হয়bufferedWriterঅবজেক্ট, কারণ এটি অটোক্লোজেবল ইন্টারফেস প্রয়োগ করে।

কোডের ফ্লাশ() পদ্ধতিটি আউটপুট স্ট্রীম ফ্লাশ করতে ব্যবহৃত হয়, যাতে সমস্ত বাফার বাইট লিখতে বাধ্য করা হয় এই কল ছাড়া লেখাটি ঘটতে পারে না, যেহেতু এটি ইঙ্গিত করে যে বাফারটি অবশ্যই ফ্লাশ করতে হবে এবং বাফার করা বাইটগুলি অবশ্যই লিখতে হবে।

BufferedWriter ক্লাসে একটি newLine() পদ্ধতি রয়েছে যা আমাদের বার্তায় একটি নতুন লাইন যোগ করে :


try (BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter("file.txt"))) {
        String message = "Hello, Amigo! This is a very important message!";
        bufferedWriter.write(message, 0, 13);
        bufferedWriter.newLine();
        bufferedWriter.write(message, 15, 33);
    } catch (IOException ex) {
        System.out.println(ex.getMessage());
    }

ফাইলে, আমরা পাই:

হ্যালো, আমিগো!
এটি একটি খুব গুরুত্বপূর্ণ বার্তা!

append() পদ্ধতির স্বাক্ষর এই মত দেখায়:


public Writer append(CharSequence csq, int start, int end)

এটি csq যোগ করতে ব্যবহৃত হয় । এখানে শুরু হল প্রথম অক্ষরের সূচী এবং শেষ হল স্ট্রিং (বা সাবস্ট্রিং) এর শেষ অক্ষরের সূচী। সূচী শেষে অক্ষর সন্নিবেশ করা হয় না.


try (BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter("file.txt"))) {
    String message = "Hello, Amigo! This is a very important message!";
    bufferedWriter.append(message, 0, 7);
    bufferedWriter.flush();
} catch (IOException ex) {
    System.out.println(ex.getMessage());
}

এই কোড আপনাকে দেবে:

হ্যালো,

অর্থাৎ, অ্যাপেন্ড পদ্ধতির সাহায্যে আপনি বাফারে স্ট্রিং এর কোন অংশ যোগ করতে হবে তা উল্লেখ করেন।

write() এবং append() এর মধ্যে পার্থক্যের দিকে আরও ঘনিষ্ঠভাবে তাকালে আমরা প্রথমে দেখতে পাই যে তারা উভয়ই নীতিগতভাবে একই কাজ করে — তারা মান লেখে।

যাইহোক, পার্থক্য হল যে অ্যাপেন্ড পদ্ধতিটি নতুন এবং একটি যুক্তি হিসাবে একটি CharSequence নেয় , এবং যেহেতু স্ট্রিং CharSequence প্রয়োগ করে , তাই আমরা স্ট্রিংস এবং স্ট্রিংবিল্ডার্স এবং স্ট্রিংবাফারগুলিকে যুক্ত পদ্ধতিতে পাস করতে পারি । কিন্তু write() পদ্ধতি শুধুমাত্র একটি স্ট্রিং গ্রহণ করবে ।

আপাতত এই পর্যন্ত! আজ আমরা বাফারগুলির সাথে পরিচিত হয়েছি, কীভাবে একটি ফাইলে বাফারযুক্ত লেখা সম্পাদন করতে হয়, সেইসাথে আপনি এটি করতে যে পদ্ধতিগুলি ব্যবহার করতে পারেন।