ByteBuffer buffer = ByteBuffer.allocate(10); /*buffer.putLong(0,333); buffer.putLong(1,222);*/ System.out.println(buffer); System.out.println(buffer.position(1).position()); System.out.println(buffer.limit(5).limit()); System.out.println(buffer.capacity()); buffer.mark(); buffer.position(0); System.out.println(buffer);
Capacity | 容量,即可以容纳的最大数据量;在缓冲区创建时被设定并且不能改变 |
Limit | 表示缓冲区的当前终点。且极限是可以修改的-----“不能对缓冲区超过极限的位置进行读写操作” limit(), limit(10)等----10是赋值,没有数字属于读值,有数字该数字则为赋的值; |
Position | 指针位置,下一个要被读或写的元素的索引,每次读写缓冲区数据时都会改变改值,为下次读写作准备 |
Mark() | 标记,调用mark()可以把position的值赋给mark; |
reset() | 把position设置成mark的值,相当于之前做过一个标记,现在要退回到之前标记的地方 |
clear() | position = 0;limit = capacity;mark = -1; 有点初始化的味道,但是并不影响底层byte数组的内容 |
get() | 相对读,从position位置读取一个byte,并将position+1,为下次读写作准备 |
get(int index) | 绝对读,读取byteBuffer底层的bytes中下标为index的byte,不改变position |
get(byte[] dst, int offset, int length) | 从position位置开始相对读,读length个byte,并写入dst下标从offset到offset+length的区域 |
put(byte b) | 相对写,向position的位置写入一个byte,并将postion+1,为下次读写作准备 |
put(int index, byte b) | 绝对写,向byteBuffer底层的bytes中下标为index的位置插入byte b,不改变position |
ByteBuffer .put(src) | 用相对写,把src中可读的部分(也就是position到limit)覆盖写入此byteBuffer |
byteBuffer.put(byte[] src, int offset, int length) | 从src数组中的offset到offset+length区域读取数据并使用相对写写入此byteBuffer |
flip() | limit = position;position = 0;mark = -1; 翻转,也就是让flip之后的position到limit这块区域变成之前的0到position这块,翻转就是将一个处于存数据状态的缓冲区变为一个处于准备取数据的状态----初始化 |
rewind() | 把position设为0,mark设为-1,不改变limit的值 |
remaining() | return limit - position;返回limit和position之间相对位置差 |
hasRemaining() | return position < limit返回是否还有未读内容 |
compact() | 把从position到limit中的内容移到0到limit-position的区域内,position和limit的取值也分别变成limit-position、capacity。如果先将positon设置到limit,再compact,那么相当于clear() |
转载网址:https://blog.youkuaiyun.com/z69183787/article/details/77102198 ,总结很全面;