1:什么是ByteBuffer?
ByteBuffer就是字节缓冲区.那什么是字节缓冲区?举个例子:就好比CPU和硬盘之间的内存。明白了吧。
2:ByteBuffer是用来干嘛呢?
顾名思义,它是用来存放字节的。很常用的地方就是程序向网络中传送数据的时候。
3:怎么使用ByteBuffer?
要使用ByteBuffer,理解其中3个指针式很重要的。position、limit和capacity
并且这三个指针的关系是 position<=limit<=capacity.
position是当前读写的位置。
limit是最大能读写的位置。
capacity是缓存的容量。
看一段程序:
1:ByteBuffer buffer = ByteBuffer.allocate(5); position=0,limit=5,capacity=5
2:buffer.put((byte)1); position=1,limit=5,capacity=5
3:buffer.flip(); position=0,limit=1,capacity=5
4:buffer.get(); position=1,limit=1,capacity=5
第一行:创建一个ByteBuffer,初始化状态下,postion为0,limit=capacity=缓冲区大小
第二行:往缓冲区放一个字节,position就会往后移动一下,但是不会超过limit。如果超过会报错。
第三行: flip方法会把limit设为position的值,而position还原为0,为读缓冲区做准备。
第四行:从缓冲区内读取一个字节,position会往后移动一下,但是不会超过limit,如果超过会报错。
4:程序
ByteBuffer buffer = ByteBuffer.allocate(5);
System.out.println("初始化:"+buffer.position());
System.out.println("初始化:"+buffer.limit());
System.out.println("初始化:"+buffer.capacity());
System.out.println();
buffer.put((byte)1);
System.out.println("放入1个字节:"+buffer.position());
System.out.println("放入1个字节:"+buffer.limit());
System.out.println("放入1个字节:"+buffer.capacity());
System.out.println();
buffer.flip();
System.out.println("flip之后:"+buffer.position());
System.out.println("flip之后:"+buffer.limit());
System.out.println("flip之后:"+buffer.capacity());
System.out.println();
buffer.get();
System.out.println("拿出一个字节:"+buffer.position());
System.out.println("拿出一个字节:"+buffer.limit());
System.out.println("拿出一个字节:"+buffer.capacity());
5:输出
初始化:0
初始化:5
初始化:5
放入1个字节:1
放入1个字节:5
放入1个字节:5
flip之后:0
flip之后:1
flip之后:5
拿出一个字节:1
拿出一个字节:1
拿出一个字节:5