JAVA ByteBuffer理解小結

重要字段

capacity:容量,最多容納多少個字節

limit: 0=<limit<=Capacity

position: 當前指針位置,從0向上增長。如果postion大於limit,Java會報出異常。

 

重要方法

get()獲取一個數據,並且,移動position

get(i) 獲取一個指定位置數據,但是,不移動position

remaining:還剩多少字節可以讀取。

flip:讓limit指向正確的位置。

compact:壓縮掉已經完成讀取的數據。

 

flip和compact是我之前不太容易理解的函數。

compact:讀取一段數據之後,調用campact,這時候position = limit,limit=capacity 可以繼續read(向buffer寫入數據)了。這可以保證寫入不會溢出,也不會覆蓋掉有用的數據。

flip:如果想要繼續讀取數據,需要調用一次flip,這樣limit = position,position = 0, 這可以保證讀取的正確性。

這就是flip和compact的用法。

 

更通俗點講:

compact壓縮空間並保證讀取正確性,compact+flip 壓縮空間並保證讀取正確性。單爲寫入準備,只調用compact即可。移動並繼續讀取,需要先調用compact進行壓縮,在通過flip方法,將position和limit設置到正確位置。

實例代碼:

    public  static  void main( String [] args )
    {
        byte [] byte_array = new byte[10];
        for( int i = 0;i<10; i++)
        {
            byte_array[i] = (byte)(i+1);
        }

        ByteBuffer bbufer = ByteBuffer.wrap(byte_array);

        System.out.println(bbufer);

        System.out.println("get for 3 times");
        System.out.println( bbufer.get());
        System.out.println( bbufer.get());
        System.out.println( bbufer.get());

        System.out.println("---Compact---");
        bbufer.compact();
        System.out.println(bbufer);

        bbufer.put((byte)(11));
        bbufer.put((byte)(12));

        System.out.println("---flip---");
        bbufer.flip();
        System.out.println(bbufer);

        System.out.println("get for 3 times");
        System.out.println( bbufer.get());
        System.out.println( bbufer.get());
        System.out.println( bbufer.get());

        System.out.println("---Compact---");
        bbufer.compact();
        System.out.println(bbufer);

        System.out.println("---flip---");
        bbufer.flip();
        System.out.println(bbufer);

        System.out.println("get for 6 times");
        System.out.println( bbufer.get());
        System.out.println( bbufer.get());
        System.out.println( bbufer.get());
        System.out.println( bbufer.get());
        System.out.println( bbufer.get());
        System.out.println( bbufer.get());

        System.out.println(bbufer);
        System.out.println("remaining:"+bbufer.remaining());

        System.out.println("---Compact---");
        bbufer.compact();
        System.out.println(bbufer);

        System.out.println("---flip---");
        bbufer.flip();
        System.out.println(bbufer);
    }

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章