nio学习值buffer的属性

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的值来复位

猜你喜欢

转载自blog.csdn.net/qq_32182461/article/details/82957644