ఈ పాఠంలో, మేము సెలెక్టర్ క్లాస్తో పరిచయం చేస్తాము. ఈ తరగతి 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);
ఫైల్చానెల్తో సెలెక్టర్ పని చేయదని ఇది అనుసరిస్తుంది , ఎందుకంటే ఫైల్ఛానెల్ను నాన్-బ్లాకింగ్ మోడ్కి మార్చడం సాధ్యం కాదు ( ఫైల్చానెల్ వారసత్వంగా పొందని సెలెక్టబుల్ ఛానెల్ క్లాస్లో కాన్ఫిగర్బ్లాకింగ్ పద్ధతి ప్రకటించబడింది ).
రేఖాచిత్రం నుండి, సెలెక్టర్లు సాకెట్లతో ఉపయోగించడానికి అనుకూలంగా ఉన్నాయని మీరు చూడవచ్చు. మేము రెండవ మాడ్యూల్ చివరిలో వారితో పని చేస్తాము.
ఎంపిక కీ
సెలెక్టర్తో ఛానెల్ని నమోదు చేసినప్పుడు, మనకు aఎంపిక కీవస్తువు. ఈ వస్తువు ఛానెల్ నమోదు గురించిన డేటాను కలిగి ఉంది.
ఛానెల్ నిర్దిష్ట విలువకు సిద్ధంగా ఉందో లేదో తెలుసుకోవడానికి మీరు కీని ఉపయోగించవచ్చు:
key.isReadable()
key.isAcceptable()
key.isConnectable()
key.isWritable()
కీ మీకు సంబంధిత ఛానెల్ మరియు సెలెక్టర్ను అందిస్తుంది:
Channel channel = key.channel();
Selector selector = key.selector();
భవిష్యత్తులో దాన్ని ట్రాక్ చేయడానికి మీరు ఏదైనా వస్తువును కీకి జోడించవచ్చు. ఇది ఛానెల్ నమోదు సమయంలో (మూడవ వాదన ద్వారా) లేదా తర్వాత చేయవచ్చు:
-
SelectionKey కీ = channel.register(సెలెక్టర్, SelectionKey.OP_ACCEPT, ఆబ్జెక్ట్);
-
key.attach(object);
తరువాత, మీరు కీ నుండి జోడించిన వస్తువును పొందవచ్చు:
Object object = key.attachment();
ముగింపు
సెలెక్టర్తో ఛానెల్లను నమోదు చేసిన తర్వాత, మేము వీటిని చేయవచ్చు:
- పేర్కొన్న కార్యకలాపాలను నిర్వహించడానికి సిద్ధంగా ఉన్న ఛానెల్ల సంఖ్యను కనుగొనండి
- కనీసం ఒక ఛానెల్ సిద్ధమయ్యే వరకు మా ప్రోగ్రామ్ అమలును నిరోధించండి
- సిద్ధంగా ఉన్న ఛానెల్ల కోసం కీల సమితిని పొందండి
- ఇంకా చాలా
రెండవ మాడ్యూల్ ముగింపులో, మేము ఆచరణలో సెలెక్టర్లను ప్రయత్నిస్తాము.
GO TO FULL VERSION