Java NIO三件套
在NIO中有三个核心对象需要掌握:缓冲区(Buffer)、选择器(Selector)和通道(Channel)
缓冲区
Buffer操作基本API
缓冲区实际上是一个容器对象,更直接地说,其实就是一个数组,在NIO库中,所有数据都是用缓冲区处理的
在读取数据时,它是直接读到缓冲区中的;在写入数据时,它也是写入缓冲区的;任何时候访问NIO中的数据,都是将它放到缓冲区中。
在NIO中,所有的缓冲区类型都继承于抽象类Buffer,最常用的就是ByteBuffer
Buffer的基本原理
在缓冲区中,最重要的属性有下面三个,它们一起合作完成对缓冲区内部状态的变化跟踪
position:指定下一个将要被写入或者读取的元素索引,它的值由get()/put()方法自动更新,在新创建一个Buffer对象时,position被初始化为0。
limit:指定还有多少数据需要取出(在从缓冲区写入通道时),或者还有多少空间可以放入数据(在从通道读入缓冲区时)。
capacity:指定了可以存储在缓冲区中的最大数据容量
缓冲区示意图
缓冲区写入:写入时position右移
缓冲区读取:一是把limit设置为当前的position值。二是把position设置为0。通过position下标从0开始读取,终点为limit。
缓冲区清空:恢复初始状态。
缓冲区的分配
在创建一个缓冲区对象时,会调用静态方法allocate()来指定缓冲区的容量,其实调