我觉得写在外面更好,
你的意思是:为什么服务器只监听、处理接入事件和可读事件,而没有监听、处理可写事件是吧。是因为一般的服务器都是一问一答式的,就是说由客户端问,服务器端答。所以服务器只需要监听可读就好,并不需要再监听可写了,也没有这种必要。
最开始没有任何客户端接入时,serverSocketChannel注册的是ACCEPT事件,等待客户端接入;等到有客户端接入后,服务器与客户端建立的socketChannel就要注册READ事件了。而serverSocketChannel还是注册ACCEPT事件,继续等待其他客户端的接入。
首先,一个Channel只能被注册到Selector上一次,如果将Channel注册多次到Selector上,其实相当于是在更新。所以,如果对Channel感兴趣的事件没有变化,是不需要重新注册的。故,源码中把再次注册的代码去掉也是不影响运行的,此处又注册了一遍只是想让大家加深印象。没想到给你带来了困惑,不好意思啊。