写模式:
- 创建Iobuffer实例,使用Iobuffer的static方法-allocate,有一个参数的方法或者两个参数,第一个参数capacity是指定创建的Iobuffer的容量的最大值,需要注意的是,首先capacity不能小于0,其次java并不是一次性就分配给该Iobuffer这么大的空间,而是根据缓冲区存储数据的实际情况动态分配。第二个参数direct是指定使用直接缓冲区还是java内存堆缓冲区(Boolean类型,默认是false,即默认使用堆缓冲区)。Allocate也支持自动扩充,setAutoExpand(),一般用于不确定会写入或接收多少数据。
- Clear和reset:两者的区别,clear时将limit放到最大容量处,游标位置position放到0,相当于重置标记,但是它不清空数据,比如写入前clear,写入数据完成之后position在数据末尾,limit在最大容量处,然后flip,limit会到之前position的位置,而position置为0,此时的缓冲区就可以正常读取数据了。reset的话一般和mark配对使用,可以将position重置到之前mark的位置。
读模式:
- Remaining:返回值是现在游标在的position到limit的差值,也就是剩下未读取的字节数。
- hasRemaining:返回值是boolean类型的,如果position小于limit,没到最大容量返回值为true,反之为false。
- 这两个一般是用在读里面的,但是在写里面也可以用,比如写的时候想知道我还有没有剩余空间,剩余多少。
通用:
- limit:在读模式的时候,其值放的数据的总量,在写模式的时候,其值是我们设置的最大容量。
- flip:模式翻转。比如 写-->读,limit=position , position=0,重置mark,这是为了读取做好准备,一般是结束buff的写操作,将buff写入输出流时调用。读取的时候从position开始,如果忘记调用的话,实际上position后面并没有数据。
- 简单说就是我们在buff中写完数据之后,position还停在我们写的数据的结尾处,limit还停在最打容量处,直接到输出流的话,无法读取数据,所以我们通过flip将limit转到position的位置,然后position放到0,这样才能正常读取。