介绍:
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缓冲区任何一方中数据的改动都会影响另一方。
总结:
广度和深度...