nio學習值buffer的屬性
阿新 • • 發佈:2018-12-13
package nio; import java.nio.ByteBuffer; //測試buffer中的屬性 //在沒有管道的情況下,buffer就想到與管道,自己建立的byte陣列就相當於緩衝區 public class test { public static void main(String[] a){ //使用bytebuffer來讀取資料 ByteBuffer byteBuffer = ByteBuffer.allocate(1024);//開闢一個1024位元組的資料空間 //讀資料 String s = "qwert"; byteBuffer.put(s.getBytes());//將資料讀取到緩衝區中 //取資料 byteBuffer.flip();//轉換為讀資料模式 byte[] bytes = new byte[byteBuffer.limit()]; byteBuffer.get(bytes);//將資料讀取到bytes陣列中 System.out.println(new String(bytes)); //使用rewind方法可以反覆讀取緩衝區中的資料 byteBuffer.rewind(); byteBuffer.get(bytes);//將資料讀取到bytes陣列中 System.out.println(new String(bytes)); //在做 下一次的資料讀寫操作時,需要使用clear方法來清除緩衝區的標記 //但是緩衝區中的資料並沒有被清除不需要執行flip方法來轉化讀寫模式 byteBuffer.clear(); byteBuffer.mark();//獲取position的位置,使得position可以復位 byteBuffer.remaining();//獲取position到limit之間還剩餘多少的資料 } } buffer中有四個關鍵屬性:
capacity:容量,緩衝區的容量
limit:界限,在讀資料模式下,limit = capacity,在取資料模式下,limit = position
position:位置 ,在讀模式下,position = 最後資料停留的位置,寫資料模式下,position會隨著操作資料的大小而變化,但是position <= limit
mark:標記,position會根據mark的值來複位