JavaTM 2 Platform
Standard Ed. 6

軟體套件 java.nio.channels

定義了各種通道,這些通道表示到能夠執行 I/O 操作的實體(如檔案和Socket)的連接;定義了用於多路傳輸的、非阻塞 I/O 操作的選擇器。

請參見:
          描述

介面摘要
ByteChannel 可讀取和寫入位元組的通道。
Channel 用於 I/O 操作的連接。
GatheringByteChannel 可從緩衝區序列寫入位元組的通道。
InterruptibleChannel 可被非同步關閉和中斷的通道。
ReadableByteChannel 可讀取位元組的通道。
ScatteringByteChannel 可將位元組讀入緩衝區序列的通道。
WritableByteChannel 可寫入位元組的通道。
 

類別摘要
Channels 針對通道和串流的實用工具方法。
DatagramChannel 針對導向資料電報Socket的可選擇通道。
FileChannel 用於讀取、寫入、映射和操作檔案的通道。
FileChannel.MapMode 檔案映射網要的型別安全的列舉。
FileLock 表示檔案區域鎖定的標記。
Pipe 實作單向管道傳送的通道對。
Pipe.SinkChannel 表示 Pipe 的可寫入結尾的通道。
Pipe.SourceChannel 表示 Pipe 的可讀取結尾的通道。
SelectableChannel 可通過 Selector 實作多路傳輸的通道。
SelectionKey 表示 SelectableChannelSelector 中的註冊的標記。
Selector SelectableChannel 物件的多路傳輸器。
ServerSocketChannel 針對導向串流的偵聽Socket的可選擇通道。
SocketChannel 針對導向串流的連接Socket的可選擇通道。
 

異常摘要
AlreadyConnectedException 試圖對已經連接的 SocketChannel 進行連接時拋出的未經檢查的異常。
AsynchronousCloseException 當在某個通道的 I/O 操作中處於阻塞狀態的某個執行緒被另一個執行緒關閉了該通道或部分通道時,該通道所接收的經過檢查的異常。
CancelledKeyException 當試圖使用不再有效的選擇鍵時,拋出此未經檢查的異常。
ClosedByInterruptException 當在某個通道的 I/O 操作中處於阻塞狀態的某個執行緒被另一個執行緒中斷時,該執行緒將收到此經過檢查的異常。
ClosedChannelException 當試圖對已關閉的、或者至少對某個 I/O 操作已關閉的通道上調用或完成該操作時,拋出此經過檢查的異常。
ClosedSelectorException 試圖在已關閉的選擇器上調用 I/O 操作時拋出的未經檢查的異常。
ConnectionPendingException 試圖連接一個正在進行非阻塞連接操作的 SocketChannel 時拋出的未經檢查的異常。
FileLockInterruptionException 當某個執行緒正在等待獲取檔案鎖定時被另一個執行緒中斷,則由該執行緒接收此經過檢查的異常。
IllegalBlockingModeException 當以錯誤的阻塞網要調用特定於某個阻塞網要的操作時,拋出此未經檢查的異常。
IllegalSelectorException 試圖將一個通道註冊到一個不是由創建該通道的提供者所創建的選擇器時,拋出此未經檢查的異常。
NoConnectionPendingException 在沒有首先成功調用 connect 方法的情況下調用 SocketChannelfinishConnect 方法時,拋出此未經檢查的異常。
NonReadableChannelException 試圖對一個最初未允許對其進行讀取操作的通道進行讀取時,拋出此未經檢查的異常。
NonWritableChannelException 試圖對一個最初未允許對其進行寫入操作的通道進行寫入時,拋出此未經檢查的異常。
NotYetBoundException 試圖在尚未綁定的伺服器Socket通道上調用 I/O 操作時,拋出此未經檢查的異常。
NotYetConnectedException 試圖在尚未連接的Socket通道上調用 I/O 操作時,拋出此未經檢查的異常。
OverlappingFileLockException 試圖獲取某個檔案區域上的鎖定,而該區域與同一 Java 虛擬機器已鎖定的某個區域重疊時,或者當另一個執行緒已經等待鎖定同一檔案的重疊區域時,拋出此未經檢查的異常。
UnresolvedAddressException 試圖對未解析的Socket位址調用網路操作時,拋出此未經檢查的異常。
UnsupportedAddressTypeException 試圖綁定或連接到一個其型別不受支持的Socket位址時,拋出此未經檢查的異常。
 

軟體套件 java.nio.channels 的描述

定義了各種通道,這些通道表示到能夠執行 I/O 操作的實體(如檔案和Socket)的連接;定義了用於多路傳輸的、非阻塞 I/O 操作的選擇器。

通道

描述

Channel 用於 I/O 操作的連接
  ReadableByteChannel 可以將內容讀入緩衝區
    ScatteringByteChannel   可以將內容讀入緩衝區序列
  WritableByteChannel 可以從緩衝區中寫入內容
    GatheringByteChannel 可以從緩衝區序列中寫入內容
  ByteChannel 可以從緩衝區讀取內容或向其寫入內容
Channels 用於通道/串流進行互操作的實用工具方法

通道 表示到實體(如硬體設備、檔案、網路Socket或者可以執行一個或多個諸如讀取或寫入之類別的不同 I/O 操作的程序元件)的開放連接。正如在 Channel 介面中所指定的,通道可以處於打開或關閉狀態,並且它們既是可非同步關閉的,又是可中斷的

多個其他介面擴展了 Channel 介面,這些介面都指定了新的 I/O 操作。

ReadableByteChannel 介面指定了 read 方法,可將位元組從通道讀取到緩衝區;類似地,WritableByteChannel 介面指定了 write 方法,可將位元組從緩衝區寫入通道。ByteChannel 介面為可讀取和寫入位元組的常見通道統一了這兩個介面。

ScatteringByteChannelGatheringByteChannel 介面分別擴展了 ReadableByteChannelWritableByteChannel 介面,添加的 readwrite 方法採用的是緩衝區序列,而不只是單個緩衝區。

Channels 實用工具類別定義了各種靜態方法,這些方法支持 java.io 套件的串流類別和此套件通道類別的互操作。可根據 InputStreamOutputStream 建構合適的通道,反之可根據通道建構 InputStreamOutputStream。可建構 Reader 來使用給定的字元集對取自給定可讀取位元組通道的位元組進行解碼,反之可建構 Writer 來使用給定的字元集將字元編碼到位元組中,並將該位元組寫入給定的可寫入位元組通道。

檔案通道

描述

FileChannel 讀取、寫入、映射和操作檔案
FileLock 對檔案(檔案區域)的鎖定
MappedByteBuffer   映射到檔案區域的直接位元組緩衝區

FileChannel 類別支持從連接到檔案的通道讀取位元組或向其寫入位元組,以及查詢和修改當前的檔案位置和將檔案截取為指定大小等常見操作。它定義了在整個檔案或具體檔案區域上獲取鎖定的方法;這些方法返回 FileLock 類別的實例。最後,它定義了對要寫入到存儲設備的檔案進行強行更新的方法、在檔案和其他通道之間高效傳輸位元組的方法,以及將檔案區域直接映射到記憶體中的方法。最後一個操作創建 MappedByteBuffer 類別的實例,該實例擴展了 ByteBuffer 類別,具有多種檔案相關的操作。

已經向 java.io 套件的每個 FileInputStreamFileOutputStreamRandomAccessFile 類別添加了 getChannel 方法。在這些類別的某個類別的實例上調用此方法將返回一個連接到底層檔案的檔案通道。

多路傳輸,非阻塞 I/O

描述

SelectableChannel 可實作多路傳輸的通道
  DatagramChannel java.net.DatagramSocket 通道
  Pipe.SinkChannel 對管道的寫入結束
  Pipe.SourceChannel 對管道的讀取結束
  ServerSocketChannel   java.net.ServerSocket 通道
  SocketChannel java.net.Socket 通道
Selector 可選擇通道的多路傳輸器
SelectionKey 表示通道註冊到選擇器的標記
Pipe 形成單向管道的兩個通道

多路傳輸的非阻塞 I/O 比導向執行緒的阻塞 I/O 的可伸縮性更好,由選擇器可選擇通道選擇鍵 提供。

選擇器可選擇通道 的多路傳輸器,它是可被置於非阻塞網要 的特殊型別的通道。要執行多路傳輸的 I/O 操作,首先要創建一個或多個可選擇通道、將其置於非阻塞網要,並將註冊 到選擇器註冊一個通道會指定一組由選擇器測試其是否準備就緒的 I/O 操作,並返回一個表示該註冊的選擇鍵

一旦已經向選擇器註冊了通道,就可執行選擇操作 以發現哪些通道(如果有)已經準備好執行先前已宣告感興趣的一個或多個操作。如果某個通道已準備就緒,則將註冊時所返回的鍵添加到該選擇器的已選擇鍵集中。為了確定每個通道已準備好執行哪些操作,可以檢查該鍵集和其中的鍵。為了執行所需的任何 I/O 操作,可根據每個鍵獲取相應的通道。

指示其通道對某個操作已準備就緒的選擇鍵只是一個提示,並不保證執行緒執行此種操作而不導致被阻塞。為了在這些提示證明不正確時忽略這些提示,則要強制寫入負責執行多路傳輸 I/O 操作的程式碼。

此套件定義了與 java.net 套件中定義的 DatagramSocketServerSocketSocket 類別相對應的可選擇通道類別。為了支持與通道相關的Socket,已經對這些類別進行了較小的更改。此套件還定義了實作單向管道的簡單類別。在所有情況下,都是通過調用相應類別的靜態 open 方法來創建新的可選擇通道。如果某個通道需要一個關聯的Socket,則此操作同時也創建一個Socket。

可通過“插入”一個在 java.nio.channels.spi 套件中定義的 SelectorProvider 類別的替代定義或實例來替換選擇器、可選通道和選擇鍵的實作。並不期望很多開發人員都會實際使用這些設施;提供它的主要目的是為了在需要極高的性能時,能夠讓經驗豐富的使用者能充分利用特定於作業系統的 I/O 多路傳輸機制。

實作多路傳輸 I/O 抽象所要求的很多簿記和同步任務由 java.nio.channels.spi 套件中的 AbstractInterruptibleChannelAbstractSelectableChannelAbstractSelectionKeyAbstractSelector 類別來執行。在定義一個自定義的選擇器提供者時,應該只直接擴展 AbstractSelectorAbstractSelectionKey 類別;自定義通道類別應該擴展此套件中定義的適當 SelectableChannel 子類別。

除非另行說明,否則將 null 參數傳遞給此套件中任何類別或介面的建構子或方法將會導致拋出 NullPointerException

從以下版本開始:
1.4

JavaTM 2 Platform
Standard Ed. 6

提交錯誤或意見

版權所有 2008 Sun Microsystems, Inc. 保留所有權利。請遵守GNU General Public License, version 2 only