SelectableChannel 類別
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
一個可以透過 Selector.
[Android.Runtime.Register("java/nio/channels/SelectableChannel", DoNotGenerateAcw=true)]
public abstract class SelectableChannel : Java.Nio.Channels.Spi.AbstractInterruptibleChannel, IDisposable
[<Android.Runtime.Register("java/nio/channels/SelectableChannel", DoNotGenerateAcw=true)>]
type SelectableChannel = class
inherit AbstractInterruptibleChannel
interface IChannel
interface ICloseable
interface IJavaObject
interface IDisposable
interface IJavaPeerable
- 繼承
- 衍生
- 屬性
- 實作
備註
一個可以透過 Selector.
若要與選擇器一起使用,必須先透過該方法#register(Selector,int,Object) register該類別的實例。 此方法會回傳一個新 SelectionKey 物件,代表通道在選擇器的註冊狀態。
一旦在選擇器註冊,該通道就會繼續註冊,直到 被取消註冊為止。 這涉及將選擇器分配給頻道的所有資源重新分配。
頻道無法直接註銷;相反地,必須 取消代表其註冊的金鑰。 取消金鑰時,會要求在選擇器下一次選擇操作時取消註冊該通道。 透過呼叫其 SelectionKey#cancel() cancel 方法,可以明確地取消一個金鑰。 當通道關閉時,所有密鑰都會被隱含地取消,無論是透過呼叫其 Channel#close close 方法,或是中斷在通道 I/O 操作中被阻塞的執行緒。
若選擇器本身關閉,通道將被取消註冊,代表註冊的金鑰將無效,且不會再拖延。
同一頻道最多只能在任一特定選擇器註冊一次。
頻道是否被一個或多個選擇器註冊,可透過呼叫 #isRegistered isRegistered 該方法來判斷。
可選通道安全,適合多個並行執行緒使用。
「bm」><h2>阻擋模式</h2>
可選頻道可分為 阻塞 模式或 非阻塞 模式。 在阻塞模式下,通道上呼叫的每個 I/O 操作都會阻塞直到完成。 在非阻塞模式下,I/O 操作永遠不會阻塞,且可能傳輸的位元組數量比請求的少,甚至可能完全沒有位元組。 可選通道的阻塞模式可透過呼叫其 #isBlocking isBlocking 方法來決定。
新建立的可選頻道始終處於阻擋模式。 非阻塞模式最適合搭配選擇器多工。 頻道必須先進入非阻塞模式,才能被選擇器註冊,且在取消註冊前不得回到阻塞模式。
在 1.4 版本加入。
Java 文件 java.nio.channels.SelectableChannel。
本頁部分內容為基於 Open Source Project 所創建與分享的作品,並依授權條款所描述的使用進行修改。
建構函式
| 名稱 | Description |
|---|---|
| SelectableChannel() |
初始化此類別的新實例。 |
| SelectableChannel(IntPtr, JniHandleOwnership) |
用於建立 JNI 物件受管理表示的建構器;由執行時呼叫。 |
屬性
| 名稱 | Description |
|---|---|
| Class |
回傳此 |
| Handle |
底層 Android 實例的帳號。 (繼承來源 Object) |
| IsBlocking |
顯示該頻道是否處於阻塞模式。 |
| IsOpen |
如果此通道開啟,則回傳為真。 (繼承來源 AbstractInterruptibleChannel) |
| IsRegistered |
顯示該頻道是否至少註冊了一個選擇器。 |
| JniIdentityHashCode |
取得由互通執行時指派給此 Java 對等端的身份雜湊碼。 (繼承來源 Object) |
| JniManagedPeerState |
一個可以透過 |
| JniPeerMembers |
一個可以透過 |
| PeerReference |
取得這個 Java 節點的 JNI 物件參考。 (繼承來源 Object) |
| ThresholdClass |
此 API 支援 Mono for Android 基礎架構,並非直接從你的程式碼中使用。 |
| ThresholdType |
此 API 支援 Mono for Android 基礎架構,並非直接從你的程式碼中使用。 |
方法
| 名稱 | Description |
|---|---|
| Begin() |
這標誌著一個可能無限期阻塞的 I/O 操作開始。 (繼承來源 AbstractInterruptibleChannel) |
| BlockingLock() |
擷取與 |
| Clone() |
建立並回傳此物件的副本。 (繼承來源 Object) |
| Close() |
關閉這個頻道。 (繼承來源 AbstractInterruptibleChannel) |
| ConfigureBlocking(Boolean) |
調整此頻道的阻擋模式。 |
| Construct(JniObjectReference, JniObjectReferenceOptions) |
一個可以透過 |
| Dispose() |
釋放該 Java 節點所持有的資源。 (繼承來源 Object) |
| Dispose(Boolean) |
釋放該 Java 節點所持有的資源。 (繼承來源 Object) |
| DisposeUnlessReferenced() |
一個可以透過 |
| End(Boolean) |
這表示一個可能無限期阻塞的 I/O 操作結束。 (繼承來源 AbstractInterruptibleChannel) |
| Equals(Object) |
一個可以透過 |
| Equals(Object) |
表示是否有其他物體「等同」於此物。 (繼承來源 Object) |
| GetHashCode() |
回傳物件的雜湊碼值。 (繼承來源 Object) |
| ImplCloseChannel() |
關閉這個頻道。 (繼承來源 AbstractInterruptibleChannel) |
| JavaFinalize() |
當垃圾回收判定該物件不再有相關參考時,由垃圾回收器呼叫。 (繼承來源 Object) |
| KeyFor(Selector) |
用指定選擇器取得代表通道註冊的金鑰。 |
| Notify() |
喚醒一個正在該物件監視器上等待的執行緒。 (繼承來源 Object) |
| NotifyAll() |
喚醒所有等待該物件監視器的執行緒。 (繼承來源 Object) |
| Provider() |
回傳創建此通道的提供者。 |
| Register(Selector, Operations, Object) |
將此通道註冊給指定的選擇器,並回傳一個選擇鍵。 |
| Register(Selector, Operations) |
將此通道註冊給指定的選擇器,並回傳一個選擇鍵。 |
| SetHandle(IntPtr, JniHandleOwnership) |
設定 Handle 屬性。 (繼承來源 Object) |
| SetPeerReference(JniObjectReference, JniObjectReferenceOptions) |
一個可以透過 |
| ToArray<T>() |
從這個 Java 陣列包裝器建立一個受管理陣列。 (繼承來源 Object) |
| ToString() |
回傳物件的字串表示。 (繼承來源 Object) |
| UnregisterFromRuntime() |
將此 Java 節點從互通執行時中取消註冊。 (繼承來源 Object) |
| ValidOps() |
回傳一個操作集,識別該通道所支援的操作。 |
| Wait() |
導致目前執行緒等待被喚醒,通常是透過 <em>通知</><em 或 em>中斷</em> 來喚醒。 (繼承來源 Object) |
| Wait(Int64, Int32) |
會讓目前執行緒等待喚醒,通常是透過 <em>通知</><em 或 em>中斷</em>,或是經過一定的真實時間。 (繼承來源 Object) |
| Wait(Int64) |
會讓目前執行緒等待喚醒,通常是透過 <em>通知</><em 或 em>中斷</em>,或是經過一定的真實時間。 (繼承來源 Object) |
明確介面實作
| 名稱 | Description |
|---|---|
| IJavaPeerable.Disposed() |
一個可以透過 |
| IJavaPeerable.Finalized() |
一個可以透過 |
| IJavaPeerable.JniObjectReferenceControlBlock |
一個可以透過 |
| IJavaPeerable.SetJniIdentityHashCode(Int32) |
一個可以透過 |
| IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates) |
一個可以透過 |
| IJavaPeerable.SetPeerReference(JniObjectReference) |
一個可以透過 |
| IJavaPeerable.UnregisterFromRuntime() |
一個可以透過 |
擴充方法
| 名稱 | Description |
|---|---|
| GetJniTypeName(IJavaPeerable) |
取得實例 |
| JavaAs<TResult>(IJavaPeerable) |
試著強制 |
| JavaCast<TResult>(IJavaObject) |
執行 Android 執行時檢查型別轉換。 |
| JavaCast<TResult>(IJavaObject) |
一個可以透過 |
| TryJavaCast<TResult>(IJavaPeerable, TResult) |
試著強制 |