最重要的四个指标:
Capacity: 当前ByteBuffer的容量
Position:当前模式下的位置 (写:写到什么位置了,读:读到什么位置了)
Limit: 当前模式下的限制位置(写:写到这不能继续再写了。再写就报错,读:读到这就没有了,再读就打你)
Mark: 记录下当前的状态,以便于回归。
重要的几个方法:
flip:
就是状态模式的转换,写转读。 就是通过修改position,limit来进行的。
public final Buffer flip() {
limit = position; // 设置读取上限
position = 0; // 重置 position
mark = -1; // 清空 mark
return this;
}
rewind:倒带,从它的代码中就能看出来,这个操作知识重置了postion的值,对于limit并没有修改,证明对于操作的位置还是有限制的,这样就更适用于读,如果是适用于写的话,应该将 capacity赋值给limit
public final Buffer rewind() {
position = 0; // 重置 position
mark = -1; // 清空 mark
return this;
}
clear: 上面刚说完适用于读恢复的操作,下面就是写恢复的操作。
public final Buffer clear() {
position = 0; // 重置 position
limit = capacity; // 恢复 limit 为 capacity
mark = -1; // 清空 mark
return this;
}
mark,reset:
mark就是给当前byteBuffer标记一个状态,记录此时的postion的值,reset就是在一系列操作之后,能根据mark进行恢复当时的状态将 mark的值赋值给position
public final Buffer mark() {
mark = position;
return this;
}
public final Buffer reset() {
int m = mark;
if (m < 0)
throw new InvalidMarkException();
position = m;
return this;
}