![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HrNX6Iuv-1663744227867)(en-resource://database/2233:1)]](https://1000bd.com/contentImg/2023/11/15/164220676.png)
缓冲区数据被读完之后,再读需要调用rewind()也叫倒带,再继续调用get()就可以了。
NIO中一个连接就用一个通道来表示。
在NIO中,涉及网络连接的通道有两个,一个是SocketChannel负责连接传输,另一个是ServerSocketChannel负责连接的监听。
ServerSocketChannel应用于服务器端,而SocketChannel同时处于服务器端和客户端。换句话说,对应于一个连接,两端都有一个负责传输的SocketChannel传输通道
选择器的使命是完成IO的多路复用。一个通道代表一条连接通路,通过选择器可以同时监控多个通道的IO(输入输出)状况。选择器和通道的关系,是监控和被监控的关系。
可供选择器监控的通道IO事件类型,包括以下四种:
SelectionKey就是Selector和Channel之间的桥梁。即Selector和SelectionKey 的事件产生关系
SelectableChannel.register(selector, SelectionKey.OP_ACCEPT);
selector 对SelectionKey 1对n
SelectionKey 对Channel:1对1
通道和选择器的监控关系注册成功后,就可以选择就绪事件。具体的选择工作,和调用选择器Selector的select()方法来完成。通过select方法,选择器可以不断地选择通道中所发生操作的就绪状态,返回注册过的感兴趣的那些IO事件。