1. 程式人生 > >Java NIO的基本概念與使用

Java NIO的基本概念與使用

物理 類型 數據 long 緩沖區 需要 方法 ble pos

public class TestBuffer {

    /**
     * . 緩沖區 (Buffer):Java Nio中負責數據的 存取+緩沖就是數組.用於存儲不同類型的數據
     *
     * 根據類型不同(boolean 除外) 都提供了對應的緩沖區
     * ByteBuffer
     * CharBuffer
     * ShortBuffer
     *
     * LongBuffer
     * FloatBuffer
     * DoubleBuffer
     *
     * 上述緩沖區的管理方式 幾乎一致 通過
allocate()獲取緩沖區 * * .緩沖區存取數據的兩個核心方法 * put():存入數據到緩沖區中 * get():獲取 緩沖區中的數據 * * * .緩沖區4個核心方法(Class:Buffer) * 1.capacity 容量,表示緩沖區中最大存儲的容量 一旦聲明不能改寫 * 2.limit 界限, 表示緩沖區可以操作數據的大小.(limit 後數據不能進行讀寫) * 3.position 位置,表示緩沖區 正在操作數據的位置 * 4.mark 標記 表示當前position
的位置 可以通過reset()恢復到 mark的位置 * * 0 <=mark<= position<= limit<=capacity * * .直接緩沖區與非直接緩沖區: * 非直接緩沖區:通過 allocate() 方法分配緩沖區, 將緩沖區建立在JVM的內存中 * 直接緩沖區: 通過 allocateDirect() 方法分配直接緩沖區,將緩沖區建立在物理內存中.可以提高效率 */ public static void main(String[] args){ String str= "Hello world"
; //1.分配一個大小 ByteBuffer byteBuffer = ByteBuffer.allocate(1024); System.out.println("--------------allocate初始化大小---------------"); System.out.println("position:"+byteBuffer.position()); System.out.println("limit:"+byteBuffer.limit()); System.out.println("capacity:"+byteBuffer.capacity()); //2.使用Put()方法 存入緩沖區數據 byteBuffer.put(str.getBytes()); System.out.println("--------------allocate存入數據後的變化---------------"); System.out.println("position:"+byteBuffer.position()); System.out.println("limit:"+byteBuffer.limit()); System.out.println("capacity:"+byteBuffer.capacity()); //3.如要讀取數據 需要切換模式 調用flip() byteBuffer.flip(); System.out.println("--------------allocate切換為讀取模式的變化---------------"); System.out.println("position:"+byteBuffer.position()); System.out.println("limit:"+byteBuffer.limit()); System.out.println("capacity:"+byteBuffer.capacity()); //4.get 讀取數據 byte[] dst = new byte[byteBuffer.limit()]; byteBuffer.get(dst); System.out.println(new String(dst,0,dst.length)); System.out.println("--------------allocate切換為讀取時的變化get()---------------"); System.out.println("position:"+byteBuffer.position()); System.out.println("limit:"+byteBuffer.limit()); System.out.println("capacity:"+byteBuffer.capacity()); //5.rewind()可重復讀數據 byteBuffer.rewind(); System.out.println("--------------allocate切換為讀取時的變化rewind()---------------"); System.out.println("position:"+byteBuffer.position()); System.out.println("limit:"+byteBuffer.limit()); System.out.println("capacity:"+byteBuffer.capacity()); //6.clear() 清空緩沖區 但是緩沖區中的數據依然存在,只是處於"被遺忘"狀態 byteBuffer.clear(); System.out.println("---------------clear() 清空緩沖區--------------"); System.out.println("position:"+byteBuffer.position()); System.out.println("limit:"+byteBuffer.limit()); System.out.println("capacity:"+byteBuffer.capacity()); //讀取第一個字符時 依然可以讀取到 System.out.println((char)byteBuffer.get()); } }

控制臺輸出:


--------------allocate初始化大小---------------
position:0
limit:1024
capacity:1024
--------------allocate存入數據後的變化---------------
position:11
limit:1024
capacity:1024
--------------allocate切換為讀取模式的變化---------------
position:0
limit:11
capacity:1024
Hello world
--------------allocate切換為讀取時的變化get()---------------
position:11
limit:11
capacity:1024
--------------allocate切換為讀取時的變化rewind()---------------
position:0
limit:11
capacity:1024
---------------clear() 清空緩沖區--------------
position:0
limit:1024
capacity:1024
H

Java NIO的基本概念與使用