1.它其实就是一个数据读取或者写入的一个缓冲区
2.基本的操作步骤:
- 向buffer写入数据,例如调用channel.read(buffer)
- 调用flip()切换至读模式
- 从buffer读取数据,例如调用buffer.get()
- 调用clear()或者compact()切换至写模式
- 重复以上步骤
3.内部结构
写模式下:每写一次,position就会往右移动一次
读模式下:limit会立马指向最后一个数据的下标位置,每读一次,position向后移动一位
4.ByteBuffer有两种不同的类型:
ByteBuffer.allocate(1).getClass()//这种方式获取的buffer是基于堆内存的,因为会受到gc垃圾回收的影响,重新移动位置后,会出现一个拷贝的步骤,这样也就会出现一个性能损耗,读写效率低一些
ByteBuffer.allocateDirect(1).getClass()//这种方式是直接基于系统内存的,读写效率较高,但是因为基于系统内存,分配时,需要调用一些系统方法去分配,所以分配效率较低,这样一来的话,也就很容易出现一个内存泄露的问题,使用后必须及时释放掉
4.常用方法:
- 向buffer中写入数据,使用channel的read方法或者buffer自己的put方法<