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