या धड्यात, आपण निवडकर्ता वर्गाशी परिचित होऊ. हा वर्ग 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 नॉन-ब्लॉकिंग मोडवर स्विच केले जाऊ शकत नाही ( कॉन्फिगरब्लॉकिंग पद्धत निवडण्यायोग्य चॅनेल वर्गामध्ये घोषित केली जाते , जी फाइल चॅनेलला वारसा मिळत नाही).

आकृतीवरून, आपण पाहू शकता की निवडक सॉकेटसह वापरण्यासाठी योग्य आहेत. आम्ही त्यांच्यासोबत दुसऱ्या मॉड्यूलच्या शेवटी काम करू.

SelectionKey

निवडकर्त्यासह चॅनेल नोंदणी करताना, आम्हाला एSelectionKeyवस्तू या ऑब्जेक्टमध्ये चॅनेल नोंदणीबद्दल डेटा आहे.

चॅनेल विशिष्ट मूल्यासाठी तयार आहे की नाही हे निर्धारित करण्यासाठी तुम्ही की वापरू शकता:


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();

निष्कर्ष

निवडकर्त्यासह चॅनेल नोंदणी केल्यानंतर, आम्ही हे करू शकतो:

  • निर्दिष्ट ऑपरेशन्स करण्यासाठी तयार चॅनेलची संख्या शोधा
  • किमान एक चॅनेल तयार होईपर्यंत आमच्या प्रोग्रामची अंमलबजावणी ब्लॉक करा
  • तयार चॅनेलसाठी की चा संच मिळवा
  • आणि अधिक

दुसऱ्या मॉड्यूलच्या शेवटी, आम्ही सराव मध्ये निवडक वापरून पाहू.