1. 程式人生 > 其它 >JavaSE:NIO - Buffer類中的變數(二)

JavaSE:NIO - Buffer類中的變數(二)

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() 函式, 這個函式會 "清空"緩衝區

      如下圖,資料沒有真正被清空,只是被遺忘掉了