Buffer--NIO

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)