Netty学习(一)---NIO学习
- Buffer针对原生八大类型除了boolean没有对应的buffer,其他的有七种buffer,如下:
- 传统的IO流是单向的,要么是输入流,要么是输出流,这是基于java单继承特性决定的,InputStream和OutputStream都是抽象类,只能继承一个;而nio有三个核心概念:Selector、Channel与Buffer,Channel是双向的,可以从读也可以写,但是与程序的交互必须每次都从Buffer经过,永远不会出现直接向Channel写入数据的情况,或是从Channel读取数据的情况。
- Buffer的基本属性:
-
- 容量(Capacity):缓冲区大小,一旦设定不可变;
- 上限(Limit):缓冲区可用边界,越过上界的区域不可读写;
- 位置(Position):下一个读写的索引,随着读写递增;
-
标记(Mark):Mark一个位置,reset会将position重新设置到mark的位置
- 通常 mark <= position <= limit <= capacity
- Buffer的clear()方法:position=0,limit=capacity,mark丢弃置位-1
- Buffer的flip()方法:limit=position,position=0,mark=-1(通常在读完进行写,或者写完进行读操作,中间要进行一次flip)
- Buffer的rewind()方法:position=0,mark=-1