|
JavaTM 2 Platform Standard Ed. 6 |
|||||||||
上一個類別 下一個類別 | 框架 無框架 | |||||||||
摘要: 巢狀 | 欄位 | 建構子 | 方法 | 詳細資訊: 欄位 | 建構子 | 方法 |
java.lang.Object java.nio.channels.spi.AbstractInterruptibleChannel java.nio.channels.SelectableChannel java.nio.channels.spi.AbstractSelectableChannel java.nio.channels.DatagramChannel
public abstract class DatagramChannel
針對導向資料電報Socket的可選擇通道。
資料電報通道不是網路資料電報Socket的完整抽象。必須通過調用 socket
所獲得的關聯 DatagramSocket
物件來完成Socket選項的綁定和操作。不可能為任意的已有資料電報Socket創建通道,也不可能指定與資料電報通道關聯的資料電報Socket所使用的 DatagramSocketImpl
物件。
通過調用此類別的 open
方法創建資料電報通道。新創建的資料電報通道已打開,但尚未連接。為了使用 send
和 receive
方法,無需連接資料電報通道。但是如果為了避免作為每次發送和接收操作的一部分而執行的安全檢查開銷,也可以通過調用資料電報通道的 connect
方法來建立資料電報通道連接。為了使用 read
和 write
方法,必須建立資料電報通道連接,因為這些方法不接受或返回Socket位址。
一旦建立了連接,在斷開資料電報通道的連接或將其關閉之前,該資料電報通道保持連接狀態。可通過調用資料電報通道的 isConnected
方法來確定它是否已連接。
多個共時執行緒可安全地使用資料電報通道。儘管在任意給定時刻最多只能有一個執行緒進行讀取和寫入操作,但資料電報通道支持共時的讀寫。
建構子摘要 | |
---|---|
protected |
DatagramChannel(SelectorProvider provider)
初始化此類別的一個新實例。 |
方法摘要 | |
---|---|
abstract DatagramChannel |
connect(SocketAddress remote)
連接此通道的Socket。 |
abstract DatagramChannel |
disconnect()
斷開此通道Socket的連接。 |
abstract boolean |
isConnected()
判斷是否已連接此通道的Socket。 |
static DatagramChannel |
open()
打開資料電報通道。 |
abstract int |
read(ByteBuffer dst)
從此通道讀取資料電報。 |
long |
read(ByteBuffer[] dsts)
從此通道讀取資料電報。 |
abstract long |
read(ByteBuffer[] dsts,
int offset,
int length)
從此通道讀取資料電報。 |
abstract SocketAddress |
receive(ByteBuffer dst)
通過此通道接收資料電報。 |
abstract int |
send(ByteBuffer src,
SocketAddress target)
通過此通道發送資料電報。 |
abstract DatagramSocket |
socket()
獲取與此通道關聯的資料電報Socket。 |
int |
validOps()
返回一個操作集,標識此通道所支持的操作。 |
abstract int |
write(ByteBuffer src)
將資料電報寫入此通道。 |
long |
write(ByteBuffer[] srcs)
將資料電報寫入此通道。 |
abstract long |
write(ByteBuffer[] srcs,
int offset,
int length)
將資料電報寫入此通道。 |
從類別 java.nio.channels.spi.AbstractSelectableChannel 繼承的方法 |
---|
blockingLock, configureBlocking, implCloseChannel, implCloseSelectableChannel, implConfigureBlocking, isBlocking, isRegistered, keyFor, provider, register |
從類別 java.nio.channels.SelectableChannel 繼承的方法 |
---|
register |
從類別 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 |
建構子詳細資訊 |
---|
protected DatagramChannel(SelectorProvider provider)
方法詳細資訊 |
---|
public static DatagramChannel open() throws IOException
通過調用系統級預設 SelectorProvider
物件的 openDatagramChannel
方法來創建新的通道。該通道不會被連接。
IOException
- 如果發生 I/O 錯誤public final int validOps()
資料電報通道支持讀取和寫入操作,所以此方法返回 (SelectionKey.OP_READ
| SelectionKey.OP_WRITE
)。
SelectableChannel
中的 validOps
public abstract DatagramSocket socket()
返回的物件不會宣告任何在 DatagramSocket
類別中未宣告的公共方法。
public abstract boolean isConnected()
public abstract DatagramChannel connect(SocketAddress remote) throws IOException
配置該通道的Socket,以便該Socket僅和給定的遠端同位體 位址進行資料電報的接收和發送。一旦連接後,就無法和任何其他位址進行資料電報的接收或發送。在顯式地斷開資料電報Socket的連接或將其關閉之前,該Socket始終保持連接狀態。
此方法執行的安全檢查與 DatagramSocket
類別的 connect
方法執行的安全檢查完全相同。也就是說,如果已安裝了安全管理器,則此方法驗證其 checkAccept
和 checkConnect
方法是否分別允許接收來自給定遠端位址的資料電報和向其發送資料電報。
可在任意時間調用此方法。此方法對調用它時正在進行的讀取或寫入操作沒有任何影響。
remote
- 與此通道連接的遠端位址
ClosedChannelException
- 如果此通道已關閉
AsynchronousCloseException
- 如果正在進行連接操作時另一個執行緒關閉了此通道
ClosedByInterruptException
- 如果正在進行連接操作時另一個執行緒中斷了當前執行緒,因此關閉了該通道並將當前執行緒設置為中斷狀態
SecurityException
- 如果已安裝安全管理器並且它不允許對給定遠端位址進行存取
IOException
- 如果發生其他 I/O 錯誤public abstract DatagramChannel disconnect() throws IOException
配置該通道的Socket,只要安全管理器允許(如果已安裝),該Socket就可和任何遠端位址進行資料電報的接收和發送。
可在任意時間調用此方法。此方法對調用它時正在進行的讀取或寫入操作沒有任何影響。
如果未連接此通道的Socket,或者通道已關閉,則調用此方法無效。
IOException
- 如果發生其他 I/O 錯誤public abstract SocketAddress receive(ByteBuffer dst) throws IOException
如果資料電報直接可用,並且此通道處於阻塞網要但最終會變得可用,則將資料電報複製到給定的位元組緩衝區中並返回資料電報的源位址。如果此通道處於非阻塞網要並且沒有直接可用的資料電報,則此方法直接返回 null。
該資料電報被傳輸到給定的位元組緩衝區中,並從緩衝區的當前位置開始存儲,如同正規的 read
操作一樣。如果緩衝區中的剩餘位元組空間小於保存資料電報所需的空間,則丟棄餘下的資料電報。
此方法執行的安全檢查與 DatagramSocket
類別的 receive
方法執行的安全檢查完全相同。也就是說,如果該Socket未連接到特定的遠端位址,並且已安裝了安全管理器,則對於接收到的每個資料電報,此方法都會驗證安全管理器的 checkAccept
方法是否允許使用該資料電報的源位址和埠號號。避免此項安全檢查開銷的方法是首先通過 connect
方法連接該Socket。
可在任意時間調用此方法。但是如果另一個執行緒已經在此通道上發起了一個讀取操作,則在該操作完成前此方法的調用被阻塞。
dst
- 要向其中傳輸資料電報的緩衝區
ClosedChannelException
- 如果此通道已關閉
AsynchronousCloseException
- 如果正在進行讀取操作時另一個執行緒關閉了此通道
ClosedByInterruptException
- 如果正在進行讀取操作時另一個執行緒中斷了當前執行緒,因此關閉了該通道並將當前執行緒設置為中斷狀態
SecurityException
- 如果已安裝安全管理器並且它不允許接受該資料電報發送者所發送的資料電報
IOException
- 如果發生其他 I/O 錯誤public abstract int send(ByteBuffer src, SocketAddress target) throws IOException
如果此通道處於非阻塞網要並且底層輸出緩衝區中沒有足夠的空間,或者如果此通道處於阻塞網要並且緩衝區中有足夠的空間,則將給定緩衝區中的剩餘位元組以單個資料電報的形式傳送到給定的目標位址。
從位元組緩衝區傳輸資料電報如同通過正規的 write
操作一樣。
此方法執行的安全檢查與 DatagramSocket
類別的 send
方法執行的安全檢查完全相同。也就是說,如果該Socket未連接到指定的遠端位址,並且已安裝了安全管理器,則對於每個發送的資料電報,此方法都會驗證安全管理器的 checkConnect
方法是否允許使用該資料電報的目標位址和埠號號。避免此項安全檢查開銷的方法是首先通過 connect
方法連接該Socket。
可在任意時間調用此方法。但是如果另一個執行緒已經在此通道上發起了一個寫入操作,則在該操作完成前此方法的調用被阻塞。
src
- 套件含要發送的資料電報的緩衝區target
- 要將資料電報發送到的位址
ClosedChannelException
- 如果此通道已關閉
AsynchronousCloseException
- 如果正在進行讀取操作時另一個執行緒關閉了此通道
ClosedByInterruptException
- 如果正在進行讀取操作時另一個執行緒中斷了當前執行緒,因此關閉了該通道並將當前執行緒設置為中斷狀態
SecurityException
- 如果已安裝安全管理器並且它不允許將資料電報發送到給定位址
IOException
- 如果發生其他 I/O 錯誤public abstract int read(ByteBuffer dst) throws IOException
僅在此通道的Socket已連接時才調用此方法,並且此方法僅接受來自該Socket同位體的資料電報。如果資料電報中的位元組數大於給定緩衝區中的剩餘空間,則丟棄餘下的資料電報。否則此方法的行為與 ReadableByteChannel
介面中指定的行為完全相同。
ReadableByteChannel
中的 read
dst
- 要向其中傳輸位元組的緩衝區
NotYetConnectedException
- 如果未連接此通道的Socket
ClosedChannelException
- 如果此通道已關閉
AsynchronousCloseException
- 如果正在進行讀取操作時另一個執行緒關閉了此通道
ClosedByInterruptException
- 如果正在進行讀取操作時另一個執行緒中斷了當前執行緒,因此關閉了該通道並將當前執行緒設置為中斷狀態
IOException
- 如果發生其他 I/O 錯誤public abstract long read(ByteBuffer[] dsts, int offset, int length) throws IOException
僅在此通道的Socket已連接時才調用此方法,並且此方法僅接受來自該Socket同位體的資料電報。如果資料電報中的位元組數大於給定緩衝區中的剩餘空間,則丟棄餘下的資料電報。否則此方法的行為與 ScatteringByteChannel
介面中指定的行為完全相同。
ScatteringByteChannel
中的 read
dsts
- 要向其中傳輸位元組的緩衝區offset
- 第一個緩衝區(位元組傳輸到該緩衝區中)在緩衝區陣列中的偏移量;必須為非負數並且不能大於 dsts.lengthlength
- 要存取的最大緩衝區數;必須為非負數並且不能大於 dsts.length - offset
NotYetConnectedException
- 如果未連接此通道的Socket
ClosedChannelException
- 如果此通道已關閉
AsynchronousCloseException
- 如果正在進行讀取操作時另一個執行緒關閉了此通道
ClosedByInterruptException
- 如果正在進行讀取操作時另一個執行緒中斷了當前執行緒,因此關閉了該通道並將當前執行緒設置為中斷狀態
IOException
- 如果發生其他 I/O 錯誤public final long read(ByteBuffer[] dsts) throws IOException
僅在此通道的Socket已連接時才調用此方法,並且此方法僅接受來自該Socket同位體的資料電報。如果資料電報中的位元組數大於給定緩衝區中的剩餘空間,則丟棄餘下的資料電報。否則此方法的行為與 ScatteringByteChannel
介面中指定的行為完全相同。
ScatteringByteChannel
中的 read
dsts
- 要向其中傳輸位元組的緩衝區
NotYetConnectedException
- 如果未連接此通道的Socket
ClosedChannelException
- 如果此通道已關閉
AsynchronousCloseException
- 如果正在進行讀取操作時另一個執行緒關閉了此通道
ClosedByInterruptException
- 如果正在進行讀取操作時另一個執行緒中斷了當前執行緒,因此關閉了該通道並將當前執行緒設置為中斷狀態
IOException
- 如果發生其他 I/O 錯誤public abstract int write(ByteBuffer src) throws IOException
僅在此通道的Socket已連接時才調用此方法,在這種情況下,此方法將資料電報直接發送到Socket的同位體。否則此方法的行為與 WritableByteChannel
介面中指定的行為完全相同。
WritableByteChannel
中的 write
src
- 要從中獲取位元組的緩衝區
NotYetConnectedException
- 如果未連接此通道的Socket
ClosedChannelException
- 如果此通道已關閉
AsynchronousCloseException
- 如果正在進行寫入操作時另一個執行緒關閉了此通道
ClosedByInterruptException
- 如果正在進行寫入操作時另一個執行緒中斷了當前執行緒,因此關閉了該通道並將當前執行緒的狀態設置為中斷
IOException
- 如果發生其他 I/O 錯誤public abstract long write(ByteBuffer[] srcs, int offset, int length) throws IOException
僅在此通道的Socket已連接時才調用此方法,在這種情況下,此方法將資料電報直接發送到Socket的同位體。否則此方法的行為與 GatheringByteChannel
介面中指定的行為完全相同。
GatheringByteChannel
中的 write
offset
- 第一個緩衝區(要獲取該緩衝區中的位元組)在緩衝區陣列中的偏移量;必須為非負數並且不能大於 srcs.lengthlength
- 要存取的最大緩衝區數;必須為非負數並且不能大於 srcs.length - offset
NotYetConnectedException
- 如果未連接此通道的Socket
ClosedChannelException
- 如果此通道已關閉
AsynchronousCloseException
- 如果正在進行寫入操作時另一個執行緒關閉了此通道
ClosedByInterruptException
- 如果正在進行寫入操作時另一個執行緒中斷了當前執行緒,因此關閉了該通道並將當前執行緒的狀態設置為中斷
IOException
- 如果發生其他 I/O 錯誤public final long write(ByteBuffer[] srcs) throws IOException
僅在此通道的Socket已連接時才調用此方法,在這種情況下,此方法將資料電報直接發送到Socket的同位體。否則此方法的行為與 GatheringByteChannel
介面中指定的行為完全相同。
GatheringByteChannel
中的 write
NotYetConnectedException
- 如果未連接此通道的Socket
ClosedChannelException
- 如果此通道已關閉
AsynchronousCloseException
- 如果正在進行寫入操作時另一個執行緒關閉了此通道
ClosedByInterruptException
- 如果正在進行寫入操作時另一個執行緒中斷了當前執行緒,因此關閉了該通道並將當前執行緒的狀態設置為中斷
IOException
- 如果發生其他 I/O 錯誤
|
JavaTM 2 Platform Standard Ed. 6 |
|||||||||
上一個類別 下一個類別 | 框架 無框架 | |||||||||
摘要: 巢狀 | 欄位 | 建構子 | 方法 | 詳細資訊: 欄位 | 建構子 | 方法 |
版權所有 2008 Sun Microsystems, Inc. 保留所有權利。請遵守GNU General Public License, version 2 only。