• JDK ByteBuffer & MINA IoBuffer 总结


     

      JDK   ByteBuffer

       

      属性:

      Mark

      上次position的快照

      Position

      当前读写索引未知

      Limit

      缓冲区限制

      Capacity

      缓冲区能力

      Offset

      偏移量

       

      说明:

      • Position(Mark)<=limit<=capacity
      • position==limit时就没有字节可读写了
      • 每次getput都将增加position
      • 重置mark就是设置mark=-1

       

       

      方法:

      Limit(int)

      如果position>limit, position = limit,如果mark>limit, 重置mark

      Mark()

      取当前的position的快照标记mark

      Reset()

      恢复position到先前标记的mark

      Clear()

      limit=capacity , position=0,重置mark,但是不清空数据,为了从头开始put做准备,其实就是清空数据,因为你put就覆盖了原来的数据

      Rewind()

      position=0,重置mark,一系列写操作后,为了从头开始get做准备,和clear()有用途上的区别,他大部分是用来从头开始读取,而clear是大部分用来重头开始填充,就是清理的意思

      Flip()

      limit=position , position=0,重置mask,为了将buf写出做好准备,一般是结束buf操作,将buf写入输出流时调用,这个必须要调用,否则极有可能position!=limit,导致position后面没有数据,每次写入数据到输出流时,必须确保position=limit

      Remaining()

      返回limit-position,返回缓冲器中的剩余字节

      Wrap(byte[])

      组装到新的buffercapacity=limit=byte[].lengthposition=0 重置mark

      Slice()

      分割缓冲器,将remaining的空间形成一个新的buffer,新的position=0limit=capacity=remaining,重置mark,和主缓冲区内容共享,其它都独立

      Duplicate()

      复制缓冲区,内容共享,其它都独立

      asReadOnlyBuffer()

      和duplicate一样,只是不可写

      Compact()

      positionlimit之间的字节移到最前面,position=limit-position,这就是这里的压缩的意思,一般是结束buf操作,将buf写入输出流时调用

      Position(int)

      position=newPosition,如果position<mark,重置mark

      Remaining()

      返回positionlimit之间的字节数

     

     

    JDK ByteBuffer

    Mina IoBuffer

    动态扩展capacity

    支持String读写

    线程安全

    可主动释放缓冲区占用内存

  • 相关阅读:
    maven build和push image中遇到的坑(学习过程记录)
    jmeter中beanshell postprocessor结合fastjson库提取不确定个数的json参数
    (转)细说linux挂载
    《软件性能测试从零开始》要点摘录
    《软件测试经验与教训》内容摘录
    关于敏捷的一点感受
    xpath定位中starts-with、contains、text()的用法
    python中的threading模块使用说明
    (转)Linux下用户组、文件权限详解
    LeetCode——树
  • 原文地址:https://www.cnblogs.com/sunwei2012/p/1810089.html
Copyright © 2020-2023  润新知