/*
*一.缓存区(Buffer):
*在Java NIO中负责数据的存储。缓存区就是数组。用于存储不同数据类型的数据。
*根据数据类型的不同(boolean除外),提供相应类型的缓存区:
*ByteBuffer
*CharBuffer
*ShortBuffer
*IntBuffer
*LongBuffer
*FloatBuffer
*DoubleBuffer
*上述缓存区的管理方式几乎一致,通过allocate()获取缓存区
*
*二.缓冲区存取数据的两个核心方法:
*put():存入数据到缓存区
*get():获取缓存区中的数据
*
*三.缓存区中的四个核心属性:
*capacity:容量,表示缓存区中的最大存储数据的容量。一旦声明不能修改
*limit:界限,表示缓冲区可以操作数据的大小。(limit后数据不能进行读写)
*position:位置,表示缓冲区中正在操作数据的位置
*mark:标记,表示记录当前position的位置,可以通过reset()恢复到mark的位置
*
*0 <= mark <= position <= limit <= capacity
*
*/
public class TestBuffer{
@Test
public void test2(){
String str = "abcde";
ByteBuffer buf = ByteBuffer.allocatie(1024);
buf.put(str.getBytes());
buf.filp();
byte[] dst = new byte[buf.limit()];
buf.get(dst,0,2);
System.out.println(new String(dst,0,2));
System.out.println(buf.position());
//mark():标记
buf.mark();
buf.get(dst,2,2);
System.out.println(new String(dst,0,2));
System.out.println(buf.position());
//reset():恢复到mark的位置
buf.reset();
System.out.println(buf.position());
//判断缓冲区中是否还有剩余数据
if(buf.hasRemaining()){
//获得缓冲区中可以操作的剩余数量
System.out.println(buf.remaining());
}
}
@Test
public void test1(){
String str = ""abcde;
//1.分配一个指定大小的缓存区
ByteBuffer buf = ByteBuffer.allocate(1024);
System.out.println("------allocation()------")
System.out.println(buf.position());
System.out.println(buf.limit());
System.out.println(buf.capacity());
//2.利用put()存入数据到缓存区中
buf.put(str.getBytes());
System.out.println("------put()------")
System.out.println(buf.position());
System.out.println(buf.limit());
System.out.println(buf.capacity());
//3.切换成读取数据的模式
buf.filp();
System.out.println("------filp()------")
System.out.println(buf.position());
System.out.println(buf.limit());
System.out.println(buf.capacity());
//4.利用get()方法读取缓冲区中的数据
byte[] dst = new byte[buf.limit()];
buf.get(dst);
System.out.println(new String(dst,0,dst.length));
System.out.println("------get()------")
System.out.println(buf.position());
System.out.println(buf.limit());
System.out.println(buf.capacity());
//5.rewind():可重复读数据
buf.rewind();
System.out.println("------rewind()------")
System.out.println(buf.position());
System.out.println(buf.limit());
System.out.println(buf.capacity());
//6.clear():清空缓冲区,但是缓存区的数据依然存在,但是处于被遗忘状态
buf.clear();
System.out.println("------clear()------")
System.out.println(buf.position());
System.out.println(buf.limit());
System.out.println(buf.capacity());
}
}
图示: