|
JavaTM 2 Platform Standard Ed. 6 |
|||||||||
上一個類別 下一個類別 | 框架 無框架 | |||||||||
摘要: 巢狀 | 欄位 | 建構子 | 方法 | 詳細資訊: 欄位 | 建構子 | 方法 |
java.lang.Object java.nio.channels.SelectionKey
public abstract class SelectionKey
表示 SelectableChannel
在 Selector
中的註冊的標記。
每次向選擇器註冊通道時就會創建一個選擇鍵。通過調用某個鍵的 選擇鍵包含兩個表示為整數值的操作集。操作集的每一位都表示該鍵的通道所支持的一類別可選擇操作。
interest 集合 確定了下一次調用某個選擇器的選擇方法時,將測試哪類別操作的準備就緒資訊。創建該鍵時使用給定的值初始化 interest 集合;之後可通過 ready 集合 標識了這樣一類別操作,即某個鍵的選擇器檢測到該鍵的通道已為此類別操作準備就緒。創建該鍵時 ready 集合被初始化為零;可以在之後的選擇操作中通過選擇器對其進行更新,但不能直接更新它。 選擇鍵的 ready 集合指示,其通道對某個操作類別別已準備就緒,該指示只是一個提示,並不保證執行緒可執行此類別別中的操作而不導致被阻塞。ready 集合很可能一完成選擇操作就是準確的。ready 集合可能由於外部事件和在相應通道上調用的 I/O 操作而變得不準確。
此類別定義了所有已知的操作集位 (operation-set bit),但是給定的通道具體支持哪些位則取決於該通道的型別。 通常必須將某個特定於應用程序的資料與某個選擇鍵相關聯,例如表示高層級協議狀態的物件和為了實作該協議而處理準備就緒通知的物件。因此,選擇鍵支持將單個任意物件附加 到某個鍵的操作。可通過 多個共時執行緒可安全地使用選擇鍵。一般情況下,讀取和寫入 interest 集合的操作將與選擇器的某些操作保持同步。具體如何執行該同步與實作有關:在一般實作中,如果正在進行某個選擇操作,那麼讀取或寫入 interest 集合可能會無限期地阻塞;在高性能的實作中,可能只會暫時阻塞。無論在哪種情況下,選擇操作將始終使用該操作開始時當前的 interest 集合值。
cancel
方法、關閉其通道,或者通過關閉其選擇器來取消 該鍵之前,它一直保持有效。取消某個鍵不會立即從其選擇器中移除它;相反,會將該鍵添加到選擇器的已取消鍵集,以便在下一次進行選擇操作時移除它。可通過調用某個鍵的 isValid
方法來測試其有效性。
interestOps(int)
方法對其進行更改。SelectableChannel
的每個子類別都定義了 validOps()
方法,該方法返回的集合恰好標識該通道支持的操作。試圖設置或測試某個鍵的通道所不支持的操作集位將導致拋出相應的運行時異常。
attach
方法附加物件,然後通過 attachment
方法獲取該物件。
SelectableChannel
,
Selector
欄位摘要 | |
---|---|
static int |
OP_ACCEPT
用於Socket接受操作的操作集位。 |
static int |
OP_CONNECT
用於Socket連接操作的操作集位。 |
static int |
OP_READ
用於讀取操作的操作集位。 |
static int |
OP_WRITE
用於寫入操作的操作集位。 |
建構子摘要 | |
---|---|
protected |
SelectionKey()
建構此類別的一個實例。 |
方法摘要 | |
---|---|
Object |
attach(Object ob)
將給定的物件附加到此鍵。 |
Object |
attachment()
獲取當前的附加物件。 |
abstract void |
cancel()
請求取消此鍵的通道到其選擇器的註冊。 |
abstract SelectableChannel |
channel()
返回為之創建此鍵的通道。 |
abstract int |
interestOps()
獲取此鍵的 interest 集合。 |
abstract SelectionKey |
interestOps(int ops)
將此鍵的 interest 集合設置為給定值。 |
boolean |
isAcceptable()
測試此鍵的通道是否已準備好接受新的Socket連接。 |
boolean |
isConnectable()
測試此鍵的通道是否已完成其Socket連接操作。 |
boolean |
isReadable()
測試此鍵的通道是否已準備好進行讀取。 |
abstract boolean |
isValid()
告知此鍵是否有效。 |
boolean |
isWritable()
測試此鍵的通道是否已準備好進行寫入。 |
abstract int |
readyOps()
獲取此鍵的 ready 操作集合。 |
abstract Selector |
selector()
返回為此選擇器創建的鍵。 |
從類別 java.lang.Object 繼承的方法 |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
欄位詳細資訊 |
---|
public static final int OP_READ
假定在選擇操作開始時,選擇鍵的 interest 集合中已包含 OP_READ。如果選擇器檢測到相應的通道已為讀取準備就緒、已經到達串流的末尾、已經被遠端關閉而無法進行進一步的讀取,或者有一個掛起的錯誤,那麼它會向該鍵的 ready 集合中添加 OP_READ,並將該鍵添加到已選擇鍵集中。
public static final int OP_WRITE
假定在選擇操作開始時,選擇鍵的 interest 集合中已包含 OP_WRITE。如果選擇器檢測到相應的通道已為寫入準備就緒、已經被遠端關閉而無法進行進一步的寫入,或者有一個掛起的錯誤,那麼它會向該鍵的 ready 集合中添加 OP_WRITE,並將該鍵添加到已選擇鍵集中。
public static final int OP_CONNECT
假定在選擇操作開始時,選擇鍵的 interest 集合中已包含 OP_CONNECT。如果選擇器檢測到相應的Socket通道已為完成其連接序列而準備就緒,或者有一個掛起的錯誤,那麼它會向該鍵的 ready 集合中添加 OP_CONNECT,並將該鍵添加到已選擇鍵集中。
public static final int OP_ACCEPT
假定在選擇操作開始時,選擇鍵的 interest 集合中已包含 OP_ACCEPT。如果選擇器檢測到相應的伺服器Socket通道已為接受另一個連接而準備就緒,或者有一個掛起的錯誤,那麼它會向該鍵的 ready 集合中添加 OP_ACCEPT,並將該鍵添加到已選擇鍵集中。
建構子詳細資訊 |
---|
protected SelectionKey()
方法詳細資訊 |
---|
public abstract SelectableChannel channel()
public abstract Selector selector()
public abstract boolean isValid()
鍵在創建時是有效的,並在被取消、其通道已關閉或者其選擇器已關閉之前保持有效。
public abstract void cancel()
如果已取消了此鍵,則調用此方法無效。一旦取消某個鍵,該鍵會一直保持無效。
可在任意時間調用此方法。此方法與選擇器的已取消鍵集保持同步,因此如果通過涉及同一選擇器的取消或選擇操作共時調用它,則它可能會暫時受阻塞。
public abstract int interestOps()
可保證返回的集合僅包含對於此鍵的通道而言有效的操作位。
可在任意時間調用此方法。是否受阻塞,以及阻塞時間長短都是與實作相關的。
CancelledKeyException
- 如果已取消此鍵public abstract SelectionKey interestOps(int ops)
可在任意時間調用此方法。是否受阻塞,以及阻塞時間長短都是與實作相關的。
ops
- 新的 interest 集合
IllegalArgumentException
- 如果集合中的某個位與此鍵的通道所支持的某個操作不對應,也就是說,如果 set & ~(channel().validOps()) != 0
CancelledKeyException
- 如果已取消此鍵public abstract int readyOps()
可保證返回的集合僅包含對於此鍵的通道而言有效的操作位。
CancelledKeyException
- 如果已取消此鍵public final boolean isReadable()
調用此方法的形式為 k.isReadable() ,該調用與以下調用的作用完全相同:
k.readyOps() & OP_READ != 0
如果此鍵的通道不支持讀取操作,則此方法始終返回 false。
CancelledKeyException
- 如果已取消此鍵public final boolean isWritable()
調用此方法的形式為 k.isWritable() ,該調用與以下調用的作用完全相同:
k.readyOps() & OP_WRITE != 0
如果此鍵的通道不支持寫入操作,則此方法始終返回 false。
CancelledKeyException
- 如果已取消此鍵public final boolean isConnectable()
調用此方法的形式為 k.isConnectable() ,該調用與以下調用的作用完全相同:
k.readyOps() & OP_CONNECT != 0
如果此鍵的通道不支持Socket連接操作,則此方法始終返回 false。
CancelledKeyException
- 如果已取消此鍵public final boolean isAcceptable()
調用此方法的形式為 k.isAcceptable() 形式,該調用與以下調用的作用完全相同:
k.readyOps() & OP_ACCEPT != 0
如果此鍵的通道不支持Socket接受操作,則此方法始終返回 false。
CancelledKeyException
- 如果已取消此鍵public final Object attach(Object ob)
之後可通過 attachment
方法獲取已附加的物件。一次只能附加一個物件;調用此方法會導致丟棄所有以前的附加物件。通過附加 null 可丟棄當前的附加物件。
ob
- 要附加的物件,可以為 null
public final Object attachment()
|
JavaTM 2 Platform Standard Ed. 6 |
|||||||||
上一個類別 下一個類別 | 框架 無框架 | |||||||||
摘要: 巢狀 | 欄位 | 建構子 | 方法 | 詳細資訊: 欄位 | 建構子 | 方法 |
版權所有 2008 Sun Microsystems, Inc. 保留所有權利。請遵守GNU General Public License, version 2 only。