1. 程式人生 > >JAVA高階基礎(44)---NIO簡介及緩衝區介紹

JAVA高階基礎(44)---NIO簡介及緩衝區介紹

NIO

Java NIO(New IO)是從Java1.4版本開始引入的一個新的IO  API。NIO與原來的IO有同樣的作用和目的,但是使用的方式完全不同,NIO支援面向緩衝區的、基於通道的IO操作。

  1. NIO支援面向緩衝區的、基於通道的IO操作。
  2. NIO將以更加高效的方式進行檔案的讀寫操作。
  3. 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):

  1. 緩衝區的容量:是它所包含的元素的數量。緩衝區的容量不能為負並且不能更改。
  2. 緩衝區的限制:是第一個不應該讀取或寫入的元素的索引。緩衝區的限制不能為負,並且不能大於其容量。
  3. 緩衝區的位置:是下一個要讀取或寫入的元素的索引。緩衝區的位置不能為負,並且不能大於其限制。
  4. 緩衝區的標記與重置:標記是一個索引,通過Buffer中的 mark() 方法指定Buffer中一個特定的position,之後可以通過呼叫 reset() 方法恢復到這個position。