Java高併發教程:詳解NIO Buffer類及其屬性

Java高併發教程:詳解NIO Buffer類及其屬性

NIO Buffer

  NIO的Buffer(緩存區)本質上是一個內存塊,既可以寫入數據,也可以從中讀取數據。NIO的Buffer類,是一個抽象類,位於java.nio包中,其內部是一個內存塊(數組)。

需要強調的是:Buffer類是一個非線程安全類。

Buffer類

  Buffer類一個抽象類,對應於Java中主要數據類型,再NIO中有8種緩存區類:  

 

 

 Buffer的使用步驟

  1. 使用創建子類實例對象的allocate()方法,創建一個Buffer類的實例對象
  2. 調用put方法,將數據寫入到緩衝區中
  3. 寫入完成後,在開始讀取數據前,調用Buffer.flip()方法,將緩衝區轉換爲讀模式
  4. 調用get方法,從緩衝區中讀取數據
  5. 讀取完成後,調用Buffer.clear() 或Buffer.compact()方法,將緩衝區轉換爲寫入模式

  代碼如下:

    public void buffer() {
        //[1] 創建Buffer實例對象
        IntBuffer intBuffer = IntBuffer.allocate(10);
        //[2] 緩存區默認爲寫模式,將數據寫入緩存區
        intBuffer.put(1);
        intBuffer.put(2);
        intBuffer.put(3);
        //[3] 將緩存區轉換爲讀模式
        intBuffer.flip();
        //從緩存區讀取數據
        System.out.println(intBuffer.get());
        System.out.println(intBuffer.get());
        System.out.println(intBuffer.get());
        //[4] 將緩存區換爲寫模式
        // intBuffer.clear(); Or intBuffer.compact();
        //[5] 倒帶,即從頭來一次!
        intBuffer.rewind();
        System.out.println(intBuffer.get());
        //[6] Mark和Reset
        intBuffer.mark();
        System.out.println(intBuffer.get());
        intBuffer.reset();
        System.out.println(intBuffer.get());
    }

  

參考資料

  • 《Netty、Redis、Zookeeper高併發實戰》

 

  

 

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