(1)作用
NIO中的Buffer用于和NIO通道进行交互:数据从通道读入缓冲区,从缓冲区写入到通道中的。
Buffer的本质是一块可读可写的内存,NIO将这块内存包装成Buffer对象,并提供了一组方法,用来方便的访问该内存
(2)position、limit
1)写模式
可以理解为栈,position为栈顶指针,limit为指针的最大位置
2)读模式
可以理解为队列,position为队首指针,limit为队尾指针
capacity是整个内存的大小,不用和前两个一起比较
3)测试
@Test
public void test() {
System.out.println("初始写状态");
ByteBuffer buffer = ByteBuffer.allocate(8);
System.out.println("position: "+buffer.position());
System.out.println("limit: "+buffer.limit());
System.out.println("-----------------");
buffer.put((byte) 5);
byte[] bytes = {6,7,8};
buffer.put(bytes);
System.out.println("放入4个数据后状态");
System.out.println("position: "+buffer.position());
System.out.println("limit: "+buffer.limit());
System.out.println("-----------------");
buffer.flip();
System.out.println("切换为读状态");
System.out.println("position: "+buffer.position());
System.out.println("limit: "+buffer.limit());
System.out.println("-----------------");
byte res = buffer.get();
System.out.println(res);
System.out.println("读取一个数据后状态");
System.out.println("position: "+buffer.position());
System.out.println("limit: "+buffer.limit());
}
结果为:
初始写状态
position: 0
limit: 8
-----------------
放入4个数据后状态
position: 4
limit: 8
-----------------
切换为读状态
position: 0
limit: 4
-----------------
5
读取一个数据后状态
position: 1
limit: 4