nio buffer 工作方式

Nio

首先我们应该说在nio里 channel selector 以及buffer ,buffer可以说是货物,channel 是送货员 当然后面你能发现 他不单单是送货员那么简单,它还可以是为多个地区分拣货物,而每个地区可以有多个channel , 而 selector 就是分拣员 他负责 以下四个状态 OP_ACCEPT ,OP_CONNENT ,OP_READ ,OP_WRITE 用来确定他们是什么状态

nio buffer 工作方式_第1张图片

buffer的工作模式

buffer是个货物 ,货物有多大?

Bytebuffer.allocate(1024)

可以通过allocate 设定 有多大

buffer.flip()

在这之前我需要了解Buffer 是什么东西 ,我们可以认为是一组基本数据类型的元素列表,具体有这几个参数,capacity,position,limit,mark

capacity 是缓冲区数组的总长度,position 是 下一个要操作的数组元素的位置,limit是数组里不可操作元素的下一个位置
Mark 用于缉毒当前position的前一个位置或者是默认0

过程

Bytebuffer.allocate(10)

这个时候 capacity 是10的下个位置 limit 默认为10 的下个位置 position 默认0

这个时候读到了5数据 ,buffer 在 sockerchannel 注册的时候放进去 

capacity 是不变 limit 不变 position 为6


butter.flip();

capacity 还是不变 limit 为6 position 为0

你可能感兴趣的:(java)