"হ্যালো, অ্যামিগো! আজ, এলি আপনাকে অ্যাডাপ্টারের প্যাটার্ন সম্পর্কে বলেছে।"
I/O স্ট্রীম সম্পর্কিত বেশিরভাগ ক্লাস অ্যাডাপ্টার হিসাবে প্রয়োগ করা হয়। তারা হয় সমতুল্য ইন্টারফেসগুলিকে রূপান্তর করে বা তারা সেগুলিকে সংযুক্ত করে, সাধারণ থেকে শুরু করে এবং জটিল পর্যন্ত চলে।
" InputStreamReader এবং BufferedReader ও কি অ্যাডাপ্টার? অন্তত, তারা যেভাবে ব্যবহার করা হয় তাতে অ্যাডাপ্টারের সাথে খুব মিল: একটি বস্তু তৈরি হওয়ার পরে, এটি অন্য শ্রেণীর কনস্ট্রাক্টরের কাছে পাঠানো হয়।"
"হ্যাঁ, ইনপুটস্ট্রিমরিডার ইনপুটস্ট্রিম ইন্টারফেসকে রিডার ইন্টারফেসে রূপান্তরিত করে । বাফারডরিডার তার বিশুদ্ধতম আকারে একটি অ্যাডাপ্টার নয়, কারণ জাভার নির্মাতারা সিদ্ধান্ত নিয়েছে যে এটির পদ্ধতিগুলিকে তাদের নিজস্ব আলাদা ইন্টারফেস দেবে না। কিন্তু এটি আত্মীয়তার আত্মা।"
একটি ব্যাজিলিয়ন বিভিন্ন ক্লাস লেখার পরিবর্তে, জাভার নির্মাতারা দুই ডজন অ্যাডাপ্টার লিখেছেন এবং তাদের একে অপরের সাথে সংযোগ করার অনুমতি দিয়েছেন যদিও একজন প্রোগ্রামার চাইলে।
এই পদ্ধতির খুব সুবিধাজনক. একজন প্রোগ্রামার সর্বদা তার ক্লাস এবং/অথবা অ্যাডাপ্টার লিখতে পারে, এটি একটি স্ট্যান্ডার্ড ইন্টারফেস প্রয়োগ করতে পারে এবং এটিকে সে তৈরি করা অ্যাডাপ্টার অবজেক্টের চেইনে অন্তর্ভুক্ত করতে পারে।
"সুতরাং এটি কীভাবে কাজ করে। বড় জটিল ক্লাসের পরিবর্তে, আমরা সাধারণ বস্তু এবং অ্যাডাপ্টারের চেইন তৈরি করি। এবং তারপরে আপনি তাদের তৈরি করুন এবং সঠিক ক্রমে একত্রিত করুন!"
"এবং আপনি যা অনুপস্থিত তা বাস্তবায়ন করেন।"
"হ্যাঁ, বুঝেছি।"
"কিন্তু আসলে আমি আজকে পাঠক এবং লেখক সম্পর্কে আপনাকে বলতে চেয়েছিলাম । এই দুটি বিমূর্ত ক্লাস যা ইনপুটস্ট্রিম এবং আউটপুট স্ট্রিম ক্লাসের সাথে খুব মিল। কিন্তু সেই ক্লাসগুলির বিপরীতে, এই দুটি ক্লাস অক্ষরগুলির সাথে কাজ করে। তারা অক্ষরগুলি পড়তে এবং লিখতে পারে। তারা পাঠ্য তথ্যের সাথে কাজ করার সময় খুব সুবিধাজনক৷ আসুন তাদের পদ্ধতিগুলি দেখে নেওয়া যাক:"
পাঠক পদ্ধতি | পদ্ধতি কি করে |
---|---|
|
"এই পদ্ধতিটি অবিলম্বে বাফারে ( char অ্যারে ) বেশ কয়েকটি অক্ষর পড়ে, যতক্ষণ না বাফারটি পূর্ণ হয় বা যতক্ষণ না উত্সটিতে পড়ার জন্য আর কোনও অক্ষর না থাকে।" পদ্ধতিটি প্রকৃতপক্ষে পঠিত অক্ষরের সংখ্যা প্রদান করে (যা অ্যারের দৈর্ঘ্যের চেয়ে কম হতে পারে) |
|
"এই পদ্ধতিটি একটি অক্ষর পড়ে এবং এটি ফেরত দেয়। ফলাফলটি চেহারার জন্য একটি int-এ প্রশস্ত করা হয়। যদি কোন উপলব্ধ অক্ষর না থাকে, তাহলে পদ্ধতিটি -1 প্রদান করে।" |
|
পঠিত পদ্ধতির জন্য কোনো অপঠিত অক্ষর থাকলে এই পদ্ধতিটি সত্য হয় |
|
এই পদ্ধতিটি প্রবাহকে "বন্ধ" করে। আপনি যখন স্ট্রীমের সাথে কাজ শেষ করেন তখন আপনি এটিকে কল করেন। বস্তুটি তখন ফাইলটি বন্ধ করার জন্য প্রয়োজনীয় হাউসকিপিং ক্রিয়াকলাপগুলি সম্পাদন করে, ইত্যাদি৷ এই সময়ে, আপনি স্ট্রীম থেকে আর কোনও ডেটা পড়তে পারবেন না৷ |
"এটা দেখা যাচ্ছে যে রিডারের রিড(char [] cbuf) পদ্ধতি আমাদেরকে এক সময়ে একটি অক্ষরের পরিবর্তে অক্ষরের সম্পূর্ণ ব্লক পড়তে দেয়। তাই এটি দ্রুত এবং আরও সুবিধাজনক।"
"ঠিক। এবং এখন দেখা যাক লেখকের কী পদ্ধতি আছে:"
পদ্ধতি | পদ্ধতি কি করে |
---|---|
|
এই পদ্ধতি একটি অক্ষর লিখতে. int টাইপ একটি গৃহস্থালি সংকীর্ণ করা হয়. অতিরিক্ত অংশ সহজভাবে বাতিল করা হয়. |
|
এই পদ্ধতিটি অক্ষরের একটি অ্যারে লেখে। |
|
এই পদ্ধতিটি একটি স্ট্রিং লেখে। এটি কেবল অক্ষরগুলির একটি অ্যারেতে রূপান্তরিত হয় এবং তারপরে দ্বিতীয় পদ্ধতিটি বলা হয়। |
|
যদি স্ট্রীম অভ্যন্তরীণভাবে এমন কোনও ডেটা সংরক্ষণ করে যা এখনও লেখা হয়নি, এই পদ্ধতিটি এটি লিখতে বাধ্য করে। |
|
এই পদ্ধতিটি প্রবাহকে "বন্ধ" করে। আপনি যখন স্ট্রীমের সাথে কাজ শেষ করেন তখন আপনি এটিকে কল করেন। বস্তুটি তখন ফাইলটি বন্ধ করার জন্য প্রয়োজনীয় হাউসকিপিং ক্রিয়াকলাপগুলি সম্পাদন করে, ইত্যাদি। আপনি আর স্ট্রীমে ডেটা লিখতে পারবেন না, এবং ফ্লাশ স্বয়ংক্রিয়ভাবে বলা হয়। |
এটা বোঝা গুরুত্বপূর্ণ যে পাঠক এবং লেখক বিমূর্ত ক্লাস। তারা কিছু করে না এবং কার্যত কোন কোড ধারণ করে না। তাদের সমস্ত পদ্ধতি তাদের উত্তরাধিকারসূত্রে পাওয়া ক্লাসগুলিতে প্রয়োগ করা দরকার। তাদের কাজ হল ক্লাসগুলি কীভাবে ইন্টারঅ্যাক্ট করে তা মানক করা । ডেভেলপারদের একে অপরের সাথে ইন্টারঅ্যাক্ট করার জন্য তাদের নিজস্ব মান আবিষ্কার করতে হবে না। প্রত্যেকের জন্য কয়েকটি মৌলিক মান বজায় রাখা অনেক বেশি সুবিধাজনক। এটি বিভিন্ন প্রোগ্রামারদের দ্বারা লিখিত ক্লাসগুলিকে শুধুমাত্র জাভা নির্মাতাদের দ্বারা লিখিত ক্লাসের সাথেই নয়, অন্যান্য প্রোগ্রামারদের দ্বারা লেখা ক্লাসগুলির সাথেও সহজেই যোগাযোগ করতে দেয়৷
মান শক্তিশালী.
"আমি সম্মত। সাধারণ মানকে সমর্থন করা সবার জন্য উপকারী।"