28、Nio(selector处理read)

Nio(selector处理read)

第一步:我们要处理read,这里我们就不是我们之前将的在什么阻塞模式下的要先进行连接(accept)再进行read了。而是我们统一用事件来判断了。所以我们这里只要监听到通道的读事件,那就是read咯

  1. 先将通道也变为非阻塞(seletor需要工作在非住宿模式下)
  2. 将这连接通道也注入seletor(用key来管理)
  3. 给key关注上那种事件(在这个通道下也只能是可读/可写事件咯)

第二步:优化逻辑,(这里我们不能让这个读事件和上面的连接事件在一起了,我们的事件集合里面可能有accept/read事件。我们需要根据不同的事件去做不同的处理。(若是我们是read事件不需要前面的accept了。))分别if判断执行

这里我们来理解下,

  1. 上面的如果是accept,我们就去用accept建立连接,然后还去将这个管理seletor的key监听了这个读事件,但是他只是将这个监听了读,并没有去做什么,只是这个通道在这里他必须这样做。
  2. 下面的读事件就是,先拿到对应的channel再去进行读到buffer里面啊ok

测试:

客户端进行连接没有问题

这里有个问题,我们用客户端去发送一个东西的时候(读事件的时候)

出现了空指针异常

猜你喜欢

转载自blog.csdn.net/logtcm4/article/details/127820880
今日推荐