标记、位置、限制和容量值遵守以下不变式:
0 <= 标记 <= 位置 <= 限制 <= 容量
位置 | 限制 | 容量 | 标记 | |
position | limit | capcity | mark | |
mark | / | / | / | position |
reset | position | / | / | / |
clear | 0 | capcity | / | 丢弃 |
flip | 0 | position | / | / |
rewind | 0 | / | / | / |
缓冲区的容量 是它所包含的元素的数量。缓冲区的容量不能为负并且不能更改。
缓冲区的限制 是第一个不应该读取或写入的元素的索引。缓冲区的限制不能为负,并且不能大于其容量。
缓冲区的位置 是下一个要读取或写入的元素的索引。缓冲区的位置不能为负,并且不能大于其限制。
(这部分是转载)
http://book.51cto.com/art/200902/109721.htm
表 5.4:在Buffer上创建不同透视的方法
方法 | Capacity | 新缓冲区的初始值 | ||
Position | Limit | Mark | ||
ByteBuffer duplicate() | capacity | position | limit | mark |
ByteBuffer slice() | remaining() | 0 | remaining() | 未定义 |
ByteBuffer asReadOnlyBuffer() | capacity | position | limit | mark |
CharBuffer asCharBuffer() | remaining()/2 | 0 | remaining()/2 | 未定义 |
DoubleBuffer asDoubleBuffer() | remaining()/8 | 0 | remaining()/8 | 未定义 |
FloatBuffer asFloatBuffer() | remaining()/4 | 0 | remaining()/4 | 未定义 |
IntBuffer asIntBuffer() | remaining()/4 | 0 | remaining()/4 | 未定义 |
LongBuffer asLongBuffer() | remaining()/8 | 0 | remaining()/8 | 未定义 |
ShortBuffer asShortBuffer() | remaining()/2 | 0 | remaining()/2 | 未 |