概述
选择器监控通道时监控的是通道中的事件,选择键就代表着IO事件。程序通过调用Selector.select()方法来选中选择器所监控的通道中的就绪的IO事件的集合,然后遍历集合,对事件做出相应的处理。
事件
选择键可以表示四种事件,这四种事件使用int类型的常量来表示。
- SelectionKey.OP_ACCEPT
表示accept事件就绪,例如:对于ServerSocketChannel来说,该事件就绪表示可以调用accept()方法来获得与客户端连接的通道SocketChannel。
- SelectionKey.OP_CONNECT
表示客户端与服务端连接成功
- SelectionKey.OP_READ
表示通道中已经有了可读数据,可以调用read()方法从通道中读取数据
- SelectionKey.OP_WRITE
表示写事件就绪,可以调用write()方法往通道中写入数据。
不同的通道所支持的IO事件不同,例如:ServerSockeChannel值支持accept事件,而DatagramChannel只支持read和write事件。要查看通道所支持的事件,可以查看通道的javadoc文档,或者调用通道的validOps()方法来进行判断。例如:channel.validOps() ,该方法返回支持的事件
