每个注册到选择器的通道都需定义需进行的操作事件类型,通过查看SelectionKey类的属性可以知道操作事件的类型有4种:
public static final int OP_READ = 1 << 0; //读操作 public static final int OP_WRITE = 1 << 2; //写操作 public static final int OP_CONNECT = 1 << 3; //连接操作 public static final int OP_ACCEPT = 1 << 4; //接收操作
选择器的检查
我们可以通过选择器的检查方法,如select()来得知发生事件的通道数量,当该数量大于为0时,即至少有一个通道发生了事件,就可以使用selectedKeys()方法来获取所有发生事件的通道对应的SelectionKey,通过SelectionKey中的方法来判断对应通道中需处理的事件类型是什么,在根据事件做出相应的处理。
public final boolean isReadable() { //判断是否是读操作
return (readyOps() & OP_READ) != 0;
}
public final boolean isWritable() { //判断是否是写操作
return (readyOps() & OP_WRITE) != 0;
}
public final boolean isConnectable() { //判断是否是连接操作
return (readyOps() & OP_CONNECT) != 0;
}
public final boolean isAcceptable() { //判断是否是接收操作
return (readyOps() & OP_ACCEPT) != 0;
}