Nio(selector处理read)
第一步:我们要处理read,这里我们就不是我们之前将的在什么阻塞模式下的要先进行连接(accept)再进行read了。而是我们统一用事件来判断了。所以我们这里只要监听到通道的读事件,那就是read咯
- 先将通道也变为非阻塞(seletor需要工作在非住宿模式下)
- 将这连接通道也注入seletor(用key来管理)
- 给key关注上那种事件(在这个通道下也只能是可读/可写事件咯)
第二步:优化逻辑,(这里我们不能让这个读事件和上面的连接事件在一起了,我们的事件集合里面可能有accept/read事件。我们需要根据不同的事件去做不同的处理。(若是我们是read事件不需要前面的accept了。))分别if判断执行
这里我们来理解下,
- 上面的如果是accept,我们就去用accept建立连接,然后还去将这个管理seletor的key监听了这个读事件,但是他只是将这个监听了读,并没有去做什么,只是这个通道在这里他必须这样做。
- 下面的读事件就是,先拿到对应的channel再去进行读到buffer里面啊ok
测试:
客户端进行连接没有问题
这里有个问题,我们用客户端去发送一个东西的时候(读事件的时候)
出现了空指针异常