Java Nio Buffer 中包含了下面展示出来的一个可不变的关系
0 <= mark <= position <= limit <= capacity
Ni o Buffer 声明如果有导致不符合的行为发生时,那么会有相对应的异常被抛出。比如,如果调用Buffer.nextGetIndex()时,如果position>=limit,则会抛出BufferOverflowException,而调用Buffer.nextPutIndex()时,如果position>=limit,则会抛出BufferOverflowException。
上面关系中的mark是用来标识Buffer.reset()需要使position复位的位置。也即是说,Buffer.reset()将使得position=mark。而mark的值可以在Buffer实例化时设置,也可以用Buffer.mark()设置。Buffer.mark()使得mark=position。
上面四个状态可以表示为:
|———————————— |—————————— |
|———————————————————————|
|———| —————|
|
其中
——— 代表整个Buffer空间
——— 代表已被使用的Buffer空间
——— 代表未使用的Buffer空间
| 代表mark位置
| 代表position位置