position, 当前位置属性spa
limit, 上界属性, put()/get() 时索引位置不容许超过上界值, put()超过上界则抛出BufferOverflowException(溢出), get() 超过上界则抛出BufferUnderflowException(暗流)code
capacity, 缓冲区总容量.blog
mark, 保存的位置值, 经过mark() 设置, 设置以后能够经过reset()返回到这个位置索引
mark <= position <= limit <= capacityip
position(int index) 设置position值为indexci
position() 返回Buffer的positionrem
limit(int index) 设置limit属性值为indexget
limit() 返回Buffer的limitit
capacity() 返回Buffer的capacityio
get() position是相对的, 每次返回值时缓冲区position属性的值加1, 能够读取当前position到limit之间的数据
get(int index) position是绝对的, 但不会影响缓冲区position属性的值, 能够读取limit以内的数据
hasRemaining() 返回是否达到缓冲区的上界, position<limit
remaining() 返回当前位置到上界还剩余的元素数目. limit-position
put() position是相对的, 每次调用时position属性自动加1, position不能越过limit
put(int index, byte b) position是绝对的, 但不会影响缓冲区position属性的值
flip() 设置limit=position, mark=-1, position=0, 以即可以从头开始操做, (是buffer.limit(buffer.position()).position(0)的简便写法), 连续两次调用flip()会导致position=0 limit=0
clear() 重置缓冲区为空状态, 其实并不改变缓冲区中的任何元素, limit=capacity, position=0, mark=-1
rewind() 能够只用rewind()后退, 重读已经被翻转的缓冲区中的数据.position=0, mark=-1
compact() 压缩Buffer, 并使得缓冲区对写入数据准备就绪, 其做用是丢弃已经释放的数据(读取过的)并保留未释放的数据, 将未释放的数据移到开始位置, position设为剩余数据的长度, limit设为最大值(即limit=capacity), 若是想在压缩后释放数据, 则仍旧须要翻转buffer.flip().
buf.clear(); // Prepare buffer for use while (in.read(buf) >= 0 || buf.position != 0) { buf.flip(); out.write(buf); buf.compact(); // In case of partial write }
mark() 保存当前位置, 以备后面返回到这个点.
reset() 设置position为以前mark的位置.
isReadOnly() 全部缓冲区都是可读的, 但并非全部缓冲区均可写, 例如对一个只读视图缓冲区的修改都会致使ReadOnlyBufferException抛出.