āđāļāļāļāđāļĢāļĩāļĒāļāļāļĩāđ āđāļĢāļēāļāļ°āļāļģāļāļ§āļēāļĄāļāļļāđāļāđāļāļĒāļāļąāļāļāļĨāļēāļŠSelector āļāļĨāļēāļŠāļāļĩāđāļāļĒāļđāđāđāļ āđāļāđāļāđāļāļ java.nio.channelsāļāļąāļāļāļąāđāļāļāļļāļāđāļĄāđāļāļģāđāļāđāļāļāđāļāļāļāļēāļ§āļāđāđāļŦāļĨāļāļŦāļĢāļ·āļāļāļģāļŦāļāļāļāđāļēāđāļāđ āđāļāļ·āđāļāđāļāđāļāļēāļ āļāđāļāļāđāļāđāļāļāđSelector āļŠāļēāļĄāļēāļĢāļāļāļĢāļ§āļāļŠāļāļāļāļāļāđāļāļāļāđ āļāđāļāļ āļŠāļąāļāļāļēāļ āļāļąāđāļāđāļāđāļŦāļāļķāđāļāļĢāļēāļĒāļāļēāļĢāļāļķāđāļāđāļāļāļĢāļ§āļāļŠāļāļāļāļ§āļēāļĄāļāļĢāđāļāļĄāđāļāļāļēāļĢāļāđāļēāļ/āđāļāļĩāļĒāļ āļŊāļĨāļŊ āđāļĨāļ°āļāļĩāđāļŠāļģāļāļąāļāļāļĩāđāļŠāļļāļāļāļ·āļ āļāļąāļ§āđāļĨāļ·āļāļāļāđāļāļāļāļēāļĢāļŦāļāļķāđāļāļŠāļāļĢāļĩāļĄ āđāļĄāđāđāļāđāļŦāļāļķāđāļāļŠāļāļĢāļĩāļĄāļāđāļāđāļāļāđāļāļĨ
āđāļĢāļēāļŠāļĢāđāļēāļāļāļąāļ§āđāļĨāļ·āļāļāđāļāļĒāđāļāđ āļ§āļīāļāļĩ āļāļēāļĢāđāļāļīāļ āđāļāļāļāļāļāļĩāđ :
Selector selector = Selector.open();
āļŦāļĨāļąāļāļāļēāļāļāļąāđāļ āļŠāļēāļĄāļēāļĢāļāļĨāļāļāļ°āđāļāļĩāļĒāļāļāđāļāļāđāļāļ§āļąāļāļāļļāļāļąāļ§āđāļĨāļ·āļāļ:
SelectionKey key1 = channel1.register(selector, SelectionKey.OP_READ);
SelectionKey key2 = channel2.register(selector, SelectionKey.OP_WRITE);
āļāļēāļĢāļēāļĄāļīāđāļāļāļĢāđāļāļĩāđāļŠāļāļāļāļāļāđāļĄāļāļāļāļĢāļĩāļāļīāļŠāđāļāļāļĢāđāļāļ°āļāļģāļŦāļāļāļāļēāļĢāļāļģāđāļāļīāļāļāļēāļĢāļāļĩāđāļāļąāļ§āđāļĨāļ·āļāļāļāļ°āļāļĢāļ§āļāļŠāļāļ āļŦāļēāļāļāļļāļāļāđāļāļāļāļēāļĢāļĄāļāļāļīāđāļāļāļĢāđāļāļēāļĢāļāļģāļāļēāļāļŦāļĨāļēāļĒāļāļĒāđāļēāļāļāļĢāđāļāļĄāļāļąāļ āļāļļāļāļŠāļēāļĄāļēāļĢāļāđāļāđ bitwise āļŦāļĢāļ·āļ:
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āđāļĄāđāļŠāļēāļĄāļēāļĢāļāđāļāļĨāļĩāđāļĒāļāđāļāđāļāđāļŦāļĄāļāđāļĄāđāļāļĨāđāļāļāđāļāđ ( āđāļĄāļāļāļ configurationBlockingāļāļđāļāļāļĢāļ°āļāļēāļĻāđāļ āļāļĨāļēāļŠ SelectableChannelāļāļķāđāļFileChannelāđāļĄāđāļŠāļ·āļāļāļāļ)
āļāļēāļāđāļāļāļ āļēāļ āļāļ°āđāļŦāđāļāļ§āđāļēāļāļĩāđāļĨāđāļāđāļāļāļĢāđāđāļŦāļĄāļēāļ°āļāļĩāđāļāļ°āđāļāđāļāļąāļāđāļāđāļēāļĢāļąāļ āđāļĢāļēāļāļ°āļāļģāļāļēāļāļĢāđāļ§āļĄāļāļąāļāļāļ§āļāđāļāļēāđāļĄāļ·āđāļāļŠāļīāđāļāļŠāļļāļāđāļĄāļāļđāļĨāļāļĩāđāļŠāļāļ
SelectionKey
āđāļĄāļ·āđāļāļĨāļāļāļ°āđāļāļĩāļĒāļāļāđāļāļāļāđāļ§āļĒāļāļąāļ§āđāļĨāļ·āļāļāđāļĢāļēāļāļ°āđāļāđāļĢāļąāļSelectionKeyāļ§āļąāļāļāļļ. āļāđāļāļāđāļāđāļāļāđāļāļĩāđāļĄāļĩāļāđāļāļĄāļđāļĨāđāļāļĩāđāļĒāļ§āļāļąāļāļāļēāļĢāļĨāļāļāļ°āđāļāļĩāļĒāļāđāļāļāđāļāļĨ
āļāļļāļāļŠāļēāļĄāļēāļĢāļāđāļāđāļāļļāđāļĄāđāļāļ·āđāļāļāļģāļŦāļāļāļ§āđāļēāļāđāļāļāļāļĢāđāļāļĄāļŠāļģāļŦāļĢāļąāļāļāđāļēāđāļāļāđāļēāļŦāļāļķāđāļāļŦāļĢāļ·āļāđāļĄāđ:
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();
āļāļāļŠāļĢāļļāļ
āļŦāļĨāļąāļāļāļēāļāļĨāļāļāļ°āđāļāļĩāļĒāļāļāđāļāļāļāđāļ§āļĒāļāļąāļ§āđāļĨāļ·āļāļ āđāļĢāļēāļŠāļēāļĄāļēāļĢāļ:
- āļāđāļāļŦāļēāļāļģāļāļ§āļāļāđāļāļāļŠāļąāļāļāļēāļāļāļĩāđāļāļĢāđāļāļĄāļāļģāđāļāļīāļāļāļēāļĢāļāļēāļĄāļāļĩāđāļĢāļ°āļāļļ
- āļāļĨāđāļāļāļāļēāļĢāļāļģāļāļēāļāļāļāļāđāļāļĢāđāļāļĢāļĄāļāļāļāđāļĢāļēāļāļāļāļ§āđāļēāļāļĒāđāļēāļāļāđāļāļĒāļŦāļāļķāđāļāļāđāļāļāļāļ°āļāļĢāđāļāļĄ
- āļĢāļąāļāļāļļāļāļāļļāļāđāļāļŠāļģāļŦāļĢāļąāļāļāđāļāļāļāļĢāđāļāļĄ
- āđāļĨāļ°āļāļ·āđāļ āđ
āđāļāļāļāļāļāđāļēāļĒāļāļāļāđāļĄāļāļđāļĨāļāļĩāđāļŠāļāļ āđāļĢāļēāļāļ°āļĨāļāļāđāļāđāļāļąāļ§āđāļĨāļ·āļāļāđāļāļāļēāļāļāļāļīāļāļąāļāļī