http://www.blogjava.net/19851985lili/articles/93524.html
NIO 详解:
NIO主要包括两个部分:java.nio.channels包介绍Selector和Channel抽象,java.nio包介绍Buffer抽象。
http://www.cnblogs.com/phoebus0501/archive/2010/12/05/1897245.html
4) Selector小结
总的来说,使用Selector的步骤如下:
1、 创建一个Selector实例。
2、 将其注册到各种信道,指定每个信道上感兴趣的I/O操作。
3、 重复执行:
1) 调用一种select方法
2) 获取选取的键列表
3) 对于已选键集中的每个键。
a. 获取信道,并从键中获取附件(如果合适的话)
b. 确定准备就绪的操作并执行。如果是accept操作,将接受的信道设置为非阻塞模式,并将其与选择器注册。
c. 如果需要,修改键的兴趣操作集
d. 从已选键中移除键
如果选择器告诉了你什么时候I/O操作准备就绪,你还需要非阻塞I/O吗?答案是肯定的。信道在已选键集中的键并不能确保非阻塞I/O,因为调用了 select()方法后,键集信息可能会过时。另外,阻塞式写操作会阻塞等待直到写完所有字节,而就绪集中的OP_WRITE仅表示至少有一个字节可写。 实际上,只是非阻塞模式的信道才能与选择器进行注册:如果信道在阻塞模式,SelectableChannel类的register()方法将抛出 IllegalBlockingModeException异常。