NIO三大核心组件

三大组件的介绍
1、Buffer(缓冲区)

用于存储数据,底层是一个数组
拥有三个核心属性:capacity、limit、position
capacity:数组的长度,意为缓冲区的总大小
limit:可读/可写的的长度
position:即将写入或者写出的下一个数据的位置
之间的大小关系为 position <= limit <= capacity

2、Channel(通道)

一个io操作的通信桥梁,起到连接作用,io操作并不直接对buffer进行数据的交换,必须通过Channel进行读/写
一个Channel可以向多个Selector注册

3、Selector(选择器)

选择器,可选通道对象的多路复用器。
用于轮询多个Channel,查看Channel的读写事件
一个Selector可以存储多个Channel

关系如图表示

在这里插入图片描述

Selector与Channel
  • SelectionKey在两者之间启着不可或缺的作用。
  • SelectionKey中封装着Selector、Channel对象以及事件key
  • Selector与Channel中均封装着SelectionKey数组
    Chanenl在向Selector注册流程:
    检查自身数组SelectionKey中是否已向该Selector注册过,如果没有注册,进行注册,通过调用Selector.register()方法进行注册并返回一个SelectionKey对象,Channel将返回的SelectionKey存入自身属性SelectionKey数组中。
Channel与Buffer

Channel通过读/写方法对Buffer中的数据进行处理。
能够进行读写的数据为position与limit之间的数据。
当写操作执行结束时,需要调用flip()将position值赋给limit,并将position重置为0,此时读取的数据便是前面写入的数据。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值