1. 程式人生 > >nio學習值buffer的屬性

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的值來複位