JAVA高階基礎(44)---NIO簡介及緩衝區介紹
阿新 • • 發佈:2018-12-15
NIO
Java NIO(New IO)是從Java1.4版本開始引入的一個新的IO API。NIO與原來的IO有同樣的作用和目的,但是使用的方式完全不同,NIO支援面向緩衝區的、基於通道的IO操作。
- NIO支援面向緩衝區的、基於通道的IO操作。
- NIO將以更加高效的方式進行檔案的讀寫操作。
- NIO採取通道(Channel)和緩衝區(Buffer)來傳輸和儲存資料,它是非阻塞式的I/O,即在等待連線、讀寫資料(這些都是在一執行緒以客戶端的程式這種會阻塞執行緒的操作)的時候,程式也可以做其他事情,以實現執行緒的非同步操作。
傳統IO和NIO的區別
IO:基於流 阻塞式IO
NIO:面向緩衝區,基於通道 非阻塞式IO
NIO示意圖
通道:用來傳輸資料的
緩衝區:用來儲存資料的
緩衝區(Buffer)
一個用於特定基本資料型別的容器。由 java.nio 包定義的,所有緩衝區都是Buffer抽象類的子類
Java NIO中的Buffer主要用於與NIO通道進行互動,資料是從通道讀入緩衝區,從緩衝區寫入通道中的
Buffer就像一個數組,可以儲存多個相同型別的資料,根據資料型別不同(boolean除外),有以下Buffer常用子類:
- ByteBuffer
- CharBuffer
- DoubleBuffer
- FloatBuffer
- IntBuffer
- LongBuffer
- ShortBuffer
基本屬性
緩衝區的基本屬性還包括:容量(capacity)、限制(limit)、位置(pos)、標記(mark)和重置(reset):
- 緩衝區的容量:是它所包含的元素的數量。緩衝區的容量不能為負並且不能更改。
- 緩衝區的限制:是第一個不應該讀取或寫入的元素的索引。緩衝區的限制不能為負,並且不能大於其容量。
- 緩衝區的位置:是下一個要讀取或寫入的元素的索引。緩衝區的位置不能為負,並且不能大於其限制。
- 緩衝區的標記與重置:標記是一個索引,通過Buffer中的 mark() 方法指定Buffer中一個特定的position,之後可以通過呼叫 reset() 方法恢復到這個position。