1.ByteBuffer的正确使用姿势:

2.ByteBuffer的属性:
* limit:ByteBuffer的读写限制
* capacity:ByteBuffer的容量,即ByteBuffer.allocate(N)或ByteBuffer.allocateDirect(N)时所指定的内存.N为capacity
* position:ByteBuffer读写到哪一个位置.
结构如下:
- put():会一直增加Position的位置,如下:
- get():会一直减少Postioin的位置,直至0,如下:
PS:get(i)方法是从指定的下标获取byteBuffer的内容,不会改变position位置 - flip():为读取做准备。会改变两个指针:将Position设置为0,将Limit设置为原来的position.
- clear():为写做准备。将各位置清理成初始状态
- compact():为写做准备。可能读取一半,就立即要写,则会将图中的cd往前移,Postion不变,limit转到capacity,以便于从上次未读完的字节后进行后续的写操作.
-
rewind():重新开始读取。将Position设置成0,limit不变
- mark():标记当前位置,和reset()配合使用。mark()方法标记当前位置,经过几次get()后,重新调用reset(),position会回到mark()标记的位置,从而实现内容的重复读取。
3.ByteBuffer和DirectByteBuffer的区别:
- ByteBuffer分配的是jvm的堆内存,读写效率低,受GC影响
- DirectByteBuffer分配的是操作系统的内存,读写效率高,不受GC影响,但分配效率低,且使用不当,可能发生内存泄露。
4.ByteBuffer和String的互转
- ByteBuffer转String
- Char转ByteBuffer