āĻāĻ‡ āĻĒāĻžāĻ ā§‡, āĻ†āĻŽāĻ°āĻž āĻ¨āĻŋāĻ°ā§āĻŦāĻžāĻšāĻ• āĻļā§āĻ°ā§‡āĻŖā§€āĻ° āĻ¸āĻžāĻĨā§‡ āĻĒāĻ°āĻŋāĻšāĻŋāĻ¤ āĻšāĻŦāĨ¤ āĻāĻ‡ āĻ•ā§āĻ˛āĻžāĻ¸āĻŸāĻŋ 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();

āĻ‰āĻĒāĻ¸āĻ‚āĻšāĻžāĻ°

āĻāĻ•āĻŸāĻŋ āĻ¨āĻŋāĻ°ā§āĻŦāĻžāĻšāĻ•ā§‡āĻ° āĻ¸āĻžāĻĨā§‡ āĻšā§āĻ¯āĻžāĻ¨ā§‡āĻ˛ āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§āĻ¨ āĻ•āĻ°āĻžāĻ° āĻĒāĻ°ā§‡, āĻ†āĻŽāĻ°āĻž āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°āĻŋ:

  • āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻŸ āĻ•ā§āĻ°āĻŋāĻ¯āĻŧāĻžāĻ•āĻ˛āĻžāĻĒ āĻ¸āĻŽā§āĻĒāĻžāĻĻāĻ¨ā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻĒā§āĻ°āĻ¸ā§āĻ¤ā§āĻ¤ āĻšā§āĻ¯āĻžāĻ¨ā§‡āĻ˛ā§‡āĻ° āĻ¸āĻ‚āĻ–ā§āĻ¯āĻž āĻ–ā§āĻāĻœā§‡ āĻŦā§‡āĻ° āĻ•āĻ°ā§āĻ¨
  • āĻ…āĻ¨ā§āĻ¤āĻ¤ āĻāĻ•āĻŸāĻŋ āĻšā§āĻ¯āĻžāĻ¨ā§‡āĻ˛ āĻĒā§āĻ°āĻ¸ā§āĻ¤ā§āĻ¤ āĻ¨āĻž āĻšāĻ“āĻ¯āĻŧāĻž āĻĒāĻ°ā§āĻ¯āĻ¨ā§āĻ¤ āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻĒā§āĻ°ā§‹āĻ—ā§āĻ°āĻžāĻŽā§‡āĻ° āĻāĻ•ā§āĻ¸āĻŋāĻ•āĻŋāĻ‰āĻļāĻ¨ āĻŦā§āĻ˛āĻ• āĻ•āĻ°ā§āĻ¨
  • āĻĒā§āĻ°āĻ¸ā§āĻ¤ā§āĻ¤ āĻšā§āĻ¯āĻžāĻ¨ā§‡āĻ˛āĻ—ā§āĻ˛āĻŋāĻ° āĻœāĻ¨ā§āĻ¯ āĻ•ā§€āĻ—ā§āĻ˛āĻŋāĻ° āĻāĻ•āĻŸāĻŋ āĻ¸ā§‡āĻŸ āĻĒāĻžāĻ¨
  • āĻāĻŦāĻ‚ āĻ†āĻ°ā§‹

āĻĻā§āĻŦāĻŋāĻ¤ā§€āĻ¯āĻŧ āĻŽāĻĄāĻŋāĻ‰āĻ˛ā§‡āĻ° āĻļā§‡āĻˇā§‡, āĻ†āĻŽāĻ°āĻž āĻ…āĻ¨ā§āĻļā§€āĻ˛āĻ¨ā§‡ āĻ¨āĻŋāĻ°ā§āĻŦāĻžāĻšāĻ•āĻĻā§‡āĻ° āĻšā§‡āĻˇā§āĻŸāĻž āĻ•āĻ°āĻŦāĨ¤