Java高併發教程:詳解NIO Buffer類及其屬性
NIO Buffer
NIO的Buffer(緩存區)本質上是一個內存塊,既可以寫入數據,也可以從中讀取數據。NIO的Buffer類,是一個抽象類,位於java.nio包中,其內部是一個內存塊(數組)。
需要強調的是:Buffer類是一個非線程安全類。
Buffer類
Buffer類一個抽象類,對應於Java中主要數據類型,再NIO中有8種緩存區類:
Buffer的使用步驟
- 使用創建子類實例對象的allocate()方法,創建一個Buffer類的實例對象。
- 調用put方法,將數據寫入到緩衝區中。
- 寫入完成後,在開始讀取數據前,調用Buffer.flip()方法,將緩衝區轉換爲讀模式。
- 調用get方法,從緩衝區中讀取數據。
- 讀取完成後,調用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高併發實戰》