এই পাঠে, আমরা নির্বাচক শ্রেণীর সাথে পরিচিত হব। এই ক্লাসটি java.nio.channels প্যাকেজে রয়েছে , তাই এটি ব্যবহার করার জন্য আপনাকে কিছু ডাউনলোড বা কনফিগার করতে হবে না। একটি নির্বাচক বস্তু এক বা একাধিক চ্যানেল অবজেক্ট নিরীক্ষণ করতে পারে, তাদের পড়ার/লেখার প্রস্তুতি পরীক্ষা করতে পারে ইত্যাদি। এবং সবচেয়ে গুরুত্বপূর্ণভাবে, একটি নির্বাচককে একটি স্ট্রিম প্রয়োজন, প্রতি চ্যানেলে একটি স্ট্রিম নয়।

আমরা স্ট্যাটিক ওপেন পদ্ধতি ব্যবহার করে নির্বাচক তৈরি করি:


Selector selector = Selector.open();

এর পরে, চ্যানেলগুলি একটি নির্বাচক বস্তুতে নিবন্ধিত হতে পারে:


SelectionKey key1 = channel1.register(selector, SelectionKey.OP_READ);
SelectionKey key2 = channel2.register(selector, SelectionKey.OP_WRITE);

রেজিস্টার পদ্ধতির দ্বিতীয় প্যারামিটার নির্ধারণ করে যে নির্বাচক কোন অপারেশনটি নিরীক্ষণ করবেন। আপনি যদি একসাথে বেশ কয়েকটি ক্রিয়াকলাপ নিরীক্ষণ করতে চান তবে আপনি বিটওয়াইজ বা ব্যবহার করতে পারেন:


SelectionKey.OP_READ | SelectionKey.OP_WRITE

কোনো চ্যানেলে কোনো I/O অ্যাকশন ঘটলে, নির্বাচক আমাদের অবহিত করেন। এইভাবে আপনি, উদাহরণস্বরূপ, বিপুল সংখ্যক ডেটা উত্স থেকে ডেটা পড়তে পারেন।

এখানে আমাদের উল্লেখ করতে হবে যে একটি চ্যানেলকে নির্বাচকের সাথে ব্যবহার করার জন্য অবশ্যই নন-ব্লকিং মোডে থাকতে হবে:


channel1.configureBlocking(false);
channel2.configureBlocking(false);
SelectionKey key1 = channel1.register(selector, SelectionKey.OP_READ);
SelectionKey key2 = channel2.register(selector, SelectionKey.OP_WRITE);

এটি অনুসরণ করে যে একটি নির্বাচক একটি FileChannel এর সাথে কাজ করবে না , কারণ একটি FileChannel নন-ব্লকিং মোডে স্যুইচ করা যায় না ( configureBlocking পদ্ধতিটি SelectableChannel ক্লাসে ঘোষণা করা হয় , যা FileChannel উত্তরাধিকারসূত্রে পায় না)।

ডায়াগ্রাম থেকে, আপনি দেখতে পাচ্ছেন যে নির্বাচকরা সকেটের সাথে ব্যবহার করার জন্য উপযুক্ত। আমরা দ্বিতীয় মডিউলের শেষে তাদের সাথে কাজ করব।

নির্বাচন কী

একটি নির্বাচকের সাথে একটি চ্যানেল নিবন্ধন করার সময়, আমরা একটি পাইনির্বাচন কীবস্তু এই অবজেক্টে চ্যানেল নিবন্ধন সম্পর্কিত ডেটা রয়েছে।

চ্যানেলটি একটি নির্দিষ্ট মানের জন্য প্রস্তুত কিনা তা নির্ধারণ করতে আপনি কী ব্যবহার করতে পারেন:


key.isReadable()
key.isAcceptable()
key.isConnectable()
key.isWritable()

কী আপনাকে সংশ্লিষ্ট চ্যানেল এবং নির্বাচক দিতে পারে:


Channel channel = key.channel();
Selector selector = key.selector();

ভবিষ্যতে ট্র্যাক করার জন্য আপনি একটি কী এর সাথে যেকোনো বস্তু সংযুক্ত করতে পারেন। এটি চ্যানেল নিবন্ধনের সময় (তৃতীয় আর্গুমেন্টের মাধ্যমে) বা পরে করা যেতে পারে:

  1. SelectionKey কী = channel.register(নির্বাচক, SelectionKey.OP_ACCEPT, অবজেক্ট);

  2. key.attach(অবজেক্ট);

পরে, আপনি কী থেকে সংযুক্ত বস্তু পেতে পারেন:


Object object = key.attachment();

উপসংহার

একটি নির্বাচকের সাথে চ্যানেল নিবন্ধন করার পরে, আমরা করতে পারি:

  • নির্দিষ্ট ক্রিয়াকলাপ সম্পাদনের জন্য প্রস্তুত চ্যানেলের সংখ্যা খুঁজে বের করুন
  • অন্তত একটি চ্যানেল প্রস্তুত না হওয়া পর্যন্ত আমাদের প্রোগ্রামের এক্সিকিউশন ব্লক করুন
  • প্রস্তুত চ্যানেলগুলির জন্য কীগুলির একটি সেট পান
  • এবং আরো

দ্বিতীয় মডিউলের শেষে, আমরা অনুশীলনে নির্বাচকদের চেষ্টা করব।