ByteBuffer

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值