美文网首页
Buffer--NIO

Buffer--NIO

作者: 追梦小蜗牛 | 来源:发表于2020-12-04 17:39 被阅读0次
    pexels-matthew-devries-3773244.jpg

    介绍:

    Buffer可以理解成一个容器,容器里面放指定的原始类型的数据,在java.nio包下面。是一个抽象类,有很多个子类实现,例如:ByteBuffer、CharBuffer、FloatBuffer等等,功能还是挺丰富的。

    属性:

    • capacity:包含元素的数量。
    • limit:不可以被读或者被写的位置。
    • position:当前读或者写位置的下一个位置。
    • mark:一般和reset一起使用,不能大于position。
    • 排序:mark <= position <=limit <= capacity

    方法:

    • clear():让buffer做好读或者put数据的准备,设置limit为capacity,position为0。
    • flip():让buffer做好写或者get数据的准备,设置limit为position,position为0。
    • rewind():让buffer重新读取一遍数据。
    • slice():创建当前buffer的一个子序列,limit、position保持不变。
    • duplicate():创建当前buffer的一个浅复制,limit、position保持不变。

    好处:

    • 减少实际的物理读写次数。
    • 减少动态分配、回收内存的次数,可以重复利用。

    ByteBuffer:抽象类、继承Buffer,提供多个静态工厂方法获取实例。

    • allocateDirect(int capacity):
      不使用JVM堆栈而是通过操作系统来创建内存块用作缓冲区,开销很大,慎用。
    • allocate(int capacity):
      堆空间中分配一个容量大小为capacity的byte数组作为缓冲区的byte数据存储器。
    • wrap(byte[] array,int offset, int length):
      可以指定偏移量和长队。
    • wrap(byte[] array):
      这个缓冲区的数据会存放在byte数组中,bytes数组或buff缓冲区任何一方中数据的改动都会影响另一方。

    总结:

    广度和深度...

    相关文章

      网友评论

          本文标题:Buffer--NIO

          本文链接:https://www.haomeiwen.com/subject/ufqiwktx.html