語言

SelectableChannel 類別

定義

一個可以透過 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

回傳此 Object的執行時類別。

(繼承來源 Object)
Handle

底層 Android 實例的帳號。

(繼承來源 Object)
IsBlocking

顯示該頻道是否處於阻塞模式。

IsOpen

如果此通道開啟,則回傳為真。

(繼承來源 AbstractInterruptibleChannel)
IsRegistered

顯示該頻道是否至少註冊了一個選擇器。

JniIdentityHashCode

取得由互通執行時指派給此 Java 對等端的身份雜湊碼。

(繼承來源 Object)
JniManagedPeerState

一個可以透過 Selector.

(繼承來源 JavaObject)
JniPeerMembers

一個可以透過 Selector.

PeerReference

取得這個 Java 節點的 JNI 物件參考。

(繼承來源 Object)
ThresholdClass

此 API 支援 Mono for Android 基礎架構,並非直接從你的程式碼中使用。

ThresholdType

此 API 支援 Mono for Android 基礎架構,並非直接從你的程式碼中使用。

方法

名稱 Description
Begin()

這標誌著一個可能無限期阻塞的 I/O 操作開始。

(繼承來源 AbstractInterruptibleChannel)
BlockingLock()

擷取與#configureBlocking configureBlocking#register register方法同步的物件。

Clone()

建立並回傳此物件的副本。

(繼承來源 Object)
Close()

關閉這個頻道。

(繼承來源 AbstractInterruptibleChannel)
ConfigureBlocking(Boolean)

調整此頻道的阻擋模式。

Construct(JniObjectReference, JniObjectReferenceOptions)

一個可以透過 Selector.

(繼承來源 JavaObject)
Dispose()

釋放該 Java 節點所持有的資源。

(繼承來源 Object)
Dispose(Boolean)

釋放該 Java 節點所持有的資源。

(繼承來源 Object)
DisposeUnlessReferenced()

一個可以透過 Selector.

(繼承來源 JavaObject)
End(Boolean)

這表示一個可能無限期阻塞的 I/O 操作結束。

(繼承來源 AbstractInterruptibleChannel)
Equals(Object)

一個可以透過 Selector.

(繼承來源 JavaObject)
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)

一個可以透過 Selector.

(繼承來源 JavaObject)
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()

一個可以透過 Selector.

(繼承來源 JavaObject)
IJavaPeerable.Finalized()

一個可以透過 Selector.

(繼承來源 JavaObject)
IJavaPeerable.JniObjectReferenceControlBlock

一個可以透過 Selector.

(繼承來源 JavaObject)
IJavaPeerable.SetJniIdentityHashCode(Int32)

一個可以透過 Selector.

(繼承來源 JavaObject)
IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates)

一個可以透過 Selector.

(繼承來源 JavaObject)
IJavaPeerable.SetPeerReference(JniObjectReference)

一個可以透過 Selector.

(繼承來源 JavaObject)
IJavaPeerable.UnregisterFromRuntime()

一個可以透過 Selector.

擴充方法

名稱 Description
GetJniTypeName(IJavaPeerable)

取得實例 self類型的 JNI 名稱。

JavaAs<TResult>(IJavaPeerable)

試著強制self輸入 TResult,檢查 強制在 Java 端是否有效。

JavaCast<TResult>(IJavaObject)

執行 Android 執行時檢查型別轉換。

JavaCast<TResult>(IJavaObject)

一個可以透過 Selector.

TryJavaCast<TResult>(IJavaPeerable, TResult)

試著強制self輸入 TResult,檢查 強制在 Java 端是否有效。

適用於