Java NIO之Selector
Java NIO之Selector
Selector常用方法
//创建selector
Selector selector = Selector.open();
//阻塞并等待就绪的通道的出现(select()方法返回的int值表示有多少通道已经就绪)
int readyNum = selector.select();
//阻塞等待timeout时间,若无就返回
int readyNum = selector.select(long timeout);
//非阻塞,只要有通道就绪就立刻返回就绪数量
int readyNum = selector.selectNow();
//选择就绪通道的选择键集合
Set<SelectionKey> selectedKeys = selector.selectedKeys();
//关闭选择器
selector.close();
interest集合
可以监听四种不同类型的事件:
- Connect (SelectionKey.OP_CONNECT)
- Accept (SelectionKey.OP_ACCEPT)
- Read (SelectionKey.OP_READ)
- Write (SelectionKey.OP_WRITE)
注册通道时可以指定监听事件
//将一个非阻塞通道注册到selector
channel.register(selector, Selectionkey.OP_READ);
也可以对多个时间进行监听
int interestSet = SelectionKey.OP_READ | SelectionKey.OP_WRITE;
//将一个非阻塞通道注册到selector
channel.register(selector, interestSet);
SelectionKey介绍
SelectionKey常用方法
key.attachment(); //返回SelectionKey的attachment,即捆绑的buffer
key.channel(); // 返回该SelectionKey对应的channel。
key.selector(); // 返回该SelectionKey对应的Selector。
//返回代表监控的IO操作的bit mask(如:SelectionKey.OP_CONNECT,突出:要监控)
key.interestOps();
// 返回一个bit mask,代表在相应channel上可以进行的IO操作。(突出:可以)
key.readyOps();
key.isAcceptable()//判断该SelectionKey是否触发Acceptable事件
key.isConnectable()//判断该SelectionKey是否触发Connectable事件
key.isReadable()//判断该SelectionKey是否触发Readabl事件
key.isWritable()//判断该SelectionKey是否触发Writable事件

浙公网安备 33010602011771号