【从NIO到Netty】3.NIOBuffer简介
Buffer为一个抽象类,有许多子类
个人感觉ByteBuffer用得最多,下面继续以该类为例进行介绍
我觉得废话是有用的,可以建立感性认识。因此介绍一下,java.nio.ByteBuffer的作者为Mark Reinhold,这个类从JDK 1.4开始就有了。
ByteBuffer的继承关系如下
它的基本使用如下
import java.nio.ByteBuffer; public class NioBuffer { public static void main(String[] args) { ByteBuffer buffer = ByteBuffer.allocate(4096); buffer.put("hello world".getBytes()); System.out.println(new String(buffer.array())); } }
ByteBuffer.allocate(4096);
如果去看源代码,可知实际是在堆中分配一个大小为4096的byte数组
ByteBuffer还维护了一系列属性,用来表征buffer的状态
• mark:-1表示undefined,但是更具体地含义和用车并不明白
• pos:用于读取的游标
• lim:表征读取的最大位置
• cap :byte数组的容量
以上面为例,ByteBuffer.allocate(4096)完成后,mark为-1,pos为0,lim为4096,cap为4096
这些属性在读写过程中的用处和更精确的含义,将在后面进行介绍
除此之外,还有其它几种分配内存的方式,比如
ByteBuffer.allocateDirect(4096); // 在直接内存中进行内存分配