āĻāĻ āĻĒāĻžāĻ ā§, āĻāĻŽāĻ°āĻž āĻ¨āĻŋāĻ°ā§āĻŦāĻžāĻāĻ āĻļā§āĻ°ā§āĻŖā§āĻ° āĻ¸āĻžāĻĨā§ āĻĒāĻ°āĻŋāĻāĻŋāĻ¤ āĻšāĻŦāĨ¤ āĻāĻ āĻā§āĻ˛āĻžāĻ¸āĻāĻŋ 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();
āĻāĻŦāĻŋāĻˇā§āĻ¯āĻ¤ā§ āĻā§āĻ°ā§āĻ¯āĻžāĻ āĻāĻ°āĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻāĻĒāĻ¨āĻŋ āĻāĻāĻāĻŋ āĻā§ āĻāĻ° āĻ¸āĻžāĻĨā§ āĻ¯ā§āĻā§āĻ¨ā§ āĻŦāĻ¸ā§āĻ¤ā§ āĻ¸āĻāĻ¯ā§āĻā§āĻ¤ āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨āĨ¤ āĻāĻāĻŋ āĻā§āĻ¯āĻžāĻ¨ā§āĻ˛ āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§āĻ¨ā§āĻ° āĻ¸āĻŽāĻ¯āĻŧ (āĻ¤ā§āĻ¤ā§āĻ¯āĻŧ āĻāĻ°ā§āĻā§āĻŽā§āĻ¨ā§āĻā§āĻ° āĻŽāĻžāĻ§ā§āĻ¯āĻŽā§) āĻŦāĻž āĻĒāĻ°ā§ āĻāĻ°āĻž āĻ¯ā§āĻ¤ā§ āĻĒāĻžāĻ°ā§:
-
SelectionKey āĻā§ = channel.register(āĻ¨āĻŋāĻ°ā§āĻŦāĻžāĻāĻ, SelectionKey.OP_ACCEPT, āĻ āĻŦāĻā§āĻā§āĻ);
-
key.attach(āĻ āĻŦāĻā§āĻā§āĻ);
āĻĒāĻ°ā§, āĻāĻĒāĻ¨āĻŋ āĻā§ āĻĨā§āĻā§ āĻ¸āĻāĻ¯ā§āĻā§āĻ¤ āĻŦāĻ¸ā§āĻ¤ā§ āĻĒā§āĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨:
Object object = key.attachment();
āĻāĻĒāĻ¸āĻāĻšāĻžāĻ°
āĻāĻāĻāĻŋ āĻ¨āĻŋāĻ°ā§āĻŦāĻžāĻāĻā§āĻ° āĻ¸āĻžāĻĨā§ āĻā§āĻ¯āĻžāĻ¨ā§āĻ˛ āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§āĻ¨ āĻāĻ°āĻžāĻ° āĻĒāĻ°ā§, āĻāĻŽāĻ°āĻž āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°āĻŋ:
- āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻ āĻā§āĻ°āĻŋāĻ¯āĻŧāĻžāĻāĻ˛āĻžāĻĒ āĻ¸āĻŽā§āĻĒāĻžāĻĻāĻ¨ā§āĻ° āĻāĻ¨ā§āĻ¯ āĻĒā§āĻ°āĻ¸ā§āĻ¤ā§āĻ¤ āĻā§āĻ¯āĻžāĻ¨ā§āĻ˛ā§āĻ° āĻ¸āĻāĻā§āĻ¯āĻž āĻā§āĻāĻā§ āĻŦā§āĻ° āĻāĻ°ā§āĻ¨
- āĻ āĻ¨ā§āĻ¤āĻ¤ āĻāĻāĻāĻŋ āĻā§āĻ¯āĻžāĻ¨ā§āĻ˛ āĻĒā§āĻ°āĻ¸ā§āĻ¤ā§āĻ¤ āĻ¨āĻž āĻšāĻāĻ¯āĻŧāĻž āĻĒāĻ°ā§āĻ¯āĻ¨ā§āĻ¤ āĻāĻŽāĻžāĻĻā§āĻ° āĻĒā§āĻ°ā§āĻā§āĻ°āĻžāĻŽā§āĻ° āĻāĻā§āĻ¸āĻŋāĻāĻŋāĻāĻļāĻ¨ āĻŦā§āĻ˛āĻ āĻāĻ°ā§āĻ¨
- āĻĒā§āĻ°āĻ¸ā§āĻ¤ā§āĻ¤ āĻā§āĻ¯āĻžāĻ¨ā§āĻ˛āĻā§āĻ˛āĻŋāĻ° āĻāĻ¨ā§āĻ¯ āĻā§āĻā§āĻ˛āĻŋāĻ° āĻāĻāĻāĻŋ āĻ¸ā§āĻ āĻĒāĻžāĻ¨
- āĻāĻŦāĻ āĻāĻ°ā§
āĻĻā§āĻŦāĻŋāĻ¤ā§āĻ¯āĻŧ āĻŽāĻĄāĻŋāĻāĻ˛ā§āĻ° āĻļā§āĻˇā§, āĻāĻŽāĻ°āĻž āĻ āĻ¨ā§āĻļā§āĻ˛āĻ¨ā§ āĻ¨āĻŋāĻ°ā§āĻŦāĻžāĻāĻāĻĻā§āĻ° āĻā§āĻˇā§āĻāĻž āĻāĻ°āĻŦāĨ¤