JavaTM 2 Platform
Standard Ed. 6

java.nio.channels.spi
類別 AbstractSelectableChannel

java.lang.Object
  繼承者 java.nio.channels.spi.AbstractInterruptibleChannel
      繼承者 java.nio.channels.SelectableChannel
          繼承者 java.nio.channels.spi.AbstractSelectableChannel
所有已實作的介面:
Closeable, Channel, InterruptibleChannel
直接已知子類別:
DatagramChannel, Pipe.SinkChannel, Pipe.SourceChannel, ServerSocketChannel, SocketChannel

public abstract class AbstractSelectableChannel
extends SelectableChannel

可選擇通道的基本實作類別。

此類別定義了處理通道註冊、註銷和關閉機制的各種方法。它會維持此通道的當前阻塞網要及其當前的選擇鍵集。它執行實作 SelectableChannel 規範所需的所有同步。此類別中所定義的抽象保護方法的實作不必與同一操作中使用的其他執行緒同步。

從以下版本開始:
1.4

建構子摘要
protected AbstractSelectableChannel(SelectorProvider provider)
          初始化此類別的一個新實例。
 
方法摘要
 Object blockingLock()
          獲取其 configureBlockingregister 方法實作同步的物件。
 SelectableChannel configureBlocking(boolean block)
          調整此通道的阻塞網要。
protected  void implCloseChannel()
          關閉此通道。
protected abstract  void implCloseSelectableChannel()
          關閉此可選擇通道。
protected abstract  void implConfigureBlocking(boolean block)
          調整此通道的阻塞網要。
 boolean isBlocking()
          判斷此通道上的每個 I/O 操作在完成前是否被阻塞。
 boolean isRegistered()
          判斷此通道當前是否已向任何選擇器註冊。
 SelectionKey keyFor(Selector sel)
          獲取表示通道向給定選擇器註冊的鍵。
 SelectorProvider provider()
          返回創建此通道的提供者。
 SelectionKey register(Selector sel, int ops, Object att)
          向給定的選擇器註冊此通道,返回一個選擇鍵。
 
從類別 java.nio.channels.SelectableChannel 繼承的方法
register, validOps
 
從類別 java.nio.channels.spi.AbstractInterruptibleChannel 繼承的方法
begin, close, end, isOpen
 
從類別 java.lang.Object 繼承的方法
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 
從介面 java.nio.channels.Channel 繼承的方法
close, isOpen
 

建構子詳細資訊

AbstractSelectableChannel

protected AbstractSelectableChannel(SelectorProvider provider)
初始化此類別的一個新實例。

方法詳細資訊

provider

public final SelectorProvider provider()
返回創建此通道的提供者。

指定者:
類別 SelectableChannel 中的 provider
返回:
創建此通道的提供者

isRegistered

public final boolean isRegistered()
從類別 SelectableChannel 複製的描述
判斷此通道當前是否已向任何選擇器註冊。新創建的通道總是未註冊的。

由於鍵取消和通道註銷之間固有的延遲,所以在已取消某個通道的所有鍵後,該通道可能在一定時間內還會保持已註冊狀態。關閉通道後,該通道可能在一定時間內還會保持已註冊狀態。

指定者:
類別 SelectableChannel 中的 isRegistered
返回:
當且僅當此通道為已註冊時才返回 true

keyFor

public final SelectionKey keyFor(Selector sel)
從類別 SelectableChannel 複製的描述
獲取表示通道向給定選擇器註冊的鍵。

指定者:
類別 SelectableChannel 中的 keyFor
返回:
當此通道是向給定選擇器註冊的最後一個通道時返回該鍵,如果此通道當前未向該選擇器註冊,則返回 null

register

public final SelectionKey register(Selector sel,
                                   int ops,
                                   Object att)
                            throws ClosedChannelException
向給定的選擇器註冊此通道,返回一個選擇鍵。

此方法首先驗證此通道是否已打開,以及給定的初始相關操作集是否有效。

如果已向給定的選擇器註冊了此通道,則在將其相關操作集設置為給定值後,返回表示該註冊的選擇鍵。

如果尚未向給定的選擇器註冊此通道,則在保持適當鎖定的同時調用選擇器的 register 方法。返回前將得到的鍵添加到此通道的鍵集中。

指定者:
類別 SelectableChannel 中的 register
參數:
sel - 要向其註冊此通道的選擇器
ops - 所得鍵的可用操作集
att - 所得鍵的附件,可能為 null
返回:
表示此通道向給定選擇器註冊的鍵
拋出:
ClosedChannelException - 如果此通道已關閉

implCloseChannel

protected final void implCloseChannel()
                               throws IOException
關閉此通道。

此方法在 AbstractInterruptibleChannel 類別中指定並且由 close 方法調用,為了實際關閉此通道,此方法依次調用 implCloseSelectableChannel 方法。然後取消此通道的所有鍵。

指定者:
類別 AbstractInterruptibleChannel 中的 implCloseChannel
拋出:
IOException - 如果關閉通道的同時發生 I/O 錯誤

implCloseSelectableChannel

protected abstract void implCloseSelectableChannel()
                                            throws IOException
關閉此可選擇通道。

為了實際關閉此通道,由 close 方法調用此方法。僅在此通道尚未關閉時才能調用此方法,並且只能調用一次。

此方法的實作必須安排阻塞於此通道上 I/O 操作中的所有其他執行緒立即返回,要麼拋出異常,要麼正常返回。

拋出:
IOException

isBlocking

public final boolean isBlocking()
從類別 SelectableChannel 複製的描述
判斷此通道上的每個 I/O 操作在完成前是否被阻塞。新創建的通道總是處於阻塞網要。

如果此通道已關閉,則此方法返回的值是未指定的。

指定者:
類別 SelectableChannel 中的 isBlocking
返回:
當且僅當此通道處於阻塞網要時才返回 true

blockingLock

public final Object blockingLock()
從類別 SelectableChannel 複製的描述
獲取其 configureBlockingregister 方法實作同步的物件。在要求在短時間內維持特定阻塞網要的適配器實作中,這通常是很有用的。

指定者:
類別 SelectableChannel 中的 blockingLock
返回:
阻塞網要鎖定物件

configureBlocking

public final SelectableChannel configureBlocking(boolean block)
                                          throws IOException
調整此通道的阻塞網要。

如果給定的阻塞網要與當前的阻塞網要不同,那麼為了改變該網要,此方法調用 implConfigureBlocking 方法,同時保持適當的鎖定。

指定者:
類別 SelectableChannel 中的 configureBlocking
參數:
block - 如果為 true,則此通道將被置於阻塞網要;如果為 false,則此通道將被置於非阻塞網要
返回:
此可選擇通道
拋出:
ClosedChannelException - 如果此通道已關閉
IOException - 如果發生 I/O 錯誤

implConfigureBlocking

protected abstract void implConfigureBlocking(boolean block)
                                       throws IOException
調整此通道的阻塞網要。

為了執行實際的更改阻塞網要的工作,由 configureBlocking 方法調用此方法。僅在新網要與當前網要不同時才調用此方法。

拋出:
IOException - 如果發生 I/O 錯誤

JavaTM 2 Platform
Standard Ed. 6

提交錯誤或意見

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