JavaSE:NIO - Buffer類中的變數(二)
阿新 • • 發佈:2021-07-01
Buffer程式碼演示
1. 首先展示一下:建立緩衝區後,核心變數的值是怎麼變化的
main(){ // 建立一個緩衝區 ByteBuffer byteBuffer = ByteBuffer.allocate(1024); // 看一下初始時,4個核心變數的值 System.out.println("初始時-->limit--->"+byteBuffer.limit()); System.out.println("初始時-->position--->"+byteBuffer.position()); System.out.println("初始時-->capacity--->"+byteBuffer.capacity()); System.out.println("初始時-->mark--->" + byteBuffer.mark()); System.out.println("--------------------------------------"); // 新增一些資料到緩衝區中 String s = "JavaEE"; byteBuffer.put(s.getBytes()); // 看一下初始時4個核心變數的值System.out.println(""put完之後-->limit--->"+byteBuffer.limit()); System.out.println(""put完之後-->position--->"+byteBuffer.position()); System.out.println(""put完之後-->capacity--->"+byteBuffer.capacity()); System.out.println(""put完之後-->mark--->" + byteBuffer.mark()); }
執行結果:
2. 現在,我想從快取區中拿資料,怎麼拿呢?
NIO給了我們一個 flip() 方法,可以改動position 和 limit的位置!
還是上面的程式碼,我們flip()一下後,再看看4個核心屬性的值會發生什麼變化:
可以看到:
<1> limit變成了position的位置了
<2> 而position變成了0
所以說,當呼叫完 flip()時:
<1> limit是限制讀到哪裡,而position是從哪裡讀
<2> 一般我們稱flip()為“切換成讀模式”
<3> 每當要從快取區讀取資料時,就呼叫flip()“切換成讀模式”
3. 切換成讀模式之後,我們就可以讀取緩衝區的資料了
// 建立一個limit()大小的位元組陣列 (因為就只有limit這個多個數據可讀) byte[] bytes = new byte[byteBuffer.limit()]; // 將讀取的資料裝進bytes陣列中 byteBuffer.get(bytes); // 輸出資料 System.out.println(new String(bytes, 0, bytes.length )); // 結果:javaEE
4. 隨後,輸出一下核心變數的值看看:
5. 讀完之後,我們還想寫資料到緩衝區, 那就使用 clear() 函式, 這個函式會 "清空"緩衝區
如下圖,資料沒有真正被清空,只是被遺忘掉了