package nio; import java.nio.ByteBuffer; //测试buffer中的属性 //在没有管道的情况下,buffer就想到与管道,自己创建的byte数组就相当于缓冲区 public class test { public static void main(String[] a){ //使用bytebuffer来读取数据 ByteBuffer byteBuffer = ByteBuffer.allocate(1024);//开辟一个1024字节的数据空间 //读数据 String s = "qwert"; byteBuffer.put(s.getBytes());//将数据读取到缓冲区中 //取数据 byteBuffer.flip();//转换为读数据模式 byte[] bytes = new byte[byteBuffer.limit()]; byteBuffer.get(bytes);//将数据读取到bytes数组中 System.out.println(new String(bytes)); //使用rewind方法可以反复读取缓冲区中的数据 byteBuffer.rewind(); byteBuffer.get(bytes);//将数据读取到bytes数组中 System.out.println(new String(bytes)); //在做 下一次的数据读写操作时,需要使用clear方法来清除缓冲区的标记 //但是缓冲区中的数据并没有被清除不需要执行flip方法来转化读写模式 byteBuffer.clear(); byteBuffer.mark();//获取position的位置,使得position可以复位 byteBuffer.remaining();//获取position到limit之间还剩余多少的数据 } } buffer中有四个关键属性:
capacity:容量,缓冲区的容量
limit:界限,在读数据模式下,limit = capacity,在取数据模式下,limit = position
position:位置 ,在读模式下,position = 最后数据停留的位置,写数据模式下,position会随着操作数据的大小而变化,但是position <= limit
mark:标记,position会根据mark的值来复位