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事件
posted @ 2021-08-02 22:45  鸭梨的药丸哥  阅读(34)  评论(0)    收藏  举报  来源