// Invariants: mark <= position <= limit <= capacity
private int mark = -1;
private int position = 0;
private int limit;
private int capacity;
从源码中可以看出,ByteBuffer的几个实例变量。我们稍后会详细解析这几个变量的意义。
在我们刚创建ByteBuffer的时候
ByteBuffer buffer = ByteBuffer.allocate(10);
其几个变量的值为
Position = 0,limit = Capactiy = 9 .为最大的值-1
在写模式下,我们写入a,b,c,d值后。position 是下一个写入位置,limit 等于容量,下图表示写入了 4 个字节后的状态。
当flip 动作发生后,position 切换为读取位置,limit 切换为读取限制
读取 4 个字节后,各个值的状态为
clear 动作发生后,又变为写模式
compact 方法,是把未读完的部分向前压缩,然后切换至写模式
好了,到此为止,我们讲了Bytebuffer的基本使用方法。
因此在使用Bytebuffer时候
【第一步】进行写入。
【第二步】通过flip切换读命令
【第三步】通过clear或者compact再次进行写命令。