Java缓冲区、通道、选择器

1. 缓存区

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HrNX6Iuv-1663744227867)(en-resource://database/2233:1)]

缓冲区数据被读完之后,再读需要调用rewind()也叫倒带,再继续调用get()就可以了。

2. 通道Channel

NIO中一个连接就用一个通道来表示。

2.1 通道类型
  • FileChannel:用于文件数据的读写
  • SocketChannel:用于Socket套接字TCP连接数据的读写
  • ServerSocketChannel:服务器监听通道,允许我们监听Socket请求,为每个监听到的请求创建SocketChannel套接字通道
  • DatagramChannel:数据报通道,用于UDP协议的数据读写。
2.1.1 SocketChannel

在NIO中,涉及网络连接的通道有两个,一个是SocketChannel负责连接传输,另一个是ServerSocketChannel负责连接的监听。
ServerSocketChannel应用于服务器端,而SocketChannel同时处于服务器端和客户端。换句话说,对应于一个连接,两端都有一个负责传输的SocketChannel传输通道

3. 选择器

选择器的使命是完成IO的多路复用。一个通道代表一条连接通路,通过选择器可以同时监控多个通道的IO(输入输出)状况。选择器和通道的关系,是监控和被监控的关系。
可供选择器监控的通道IO事件类型,包括以下四种:

  1. 可读:SelectionKey.OP_READ
  2. 可写:SelectionKey.OP_WRITE
  3. 连接:SelectionKey.OP_CONNECT
  4. 接收:SelectionKey.OP_ACCEPT 。比如某个ServerSocketChannel服务器通道,监听到一个新连接的到来,则处于“接收就绪”(OP_ACCEPT)状态
3.1 SelectionKey 选择键

SelectionKey就是SelectorChannel之间的桥梁。即SelectorSelectionKey 的事件产生关系

SelectableChannel.register(selector, SelectionKey.OP_ACCEPT);
selector 对SelectionKey 1对n
SelectionKey 对Channel:1对1

通道和选择器的监控关系注册成功后,就可以选择就绪事件。具体的选择工作,和调用选择器Selector的select()方法来完成。通过select方法,选择器可以不断地选择通道中所发生操作的就绪状态,返回注册过的感兴趣的那些IO事件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值