JavaTM 2 Platform
Standard Ed. 6

java.nio.channels
介面 ScatteringByteChannel

所有父級介面:
Channel, Closeable, ReadableByteChannel
所有已知實作類別:
DatagramChannel, FileChannel, Pipe.SourceChannel, SocketChannel

public interface ScatteringByteChannel
extends ReadableByteChannel

可將位元組讀入緩衝區序列的通道。

分散 讀取操作可在單個調用中將一個位元組序列讀入一個或多個給定的緩衝區序列。分散讀取通常在實作網路協議或檔案格式時很有用,例如將資料分組放入段中(這些段由一個或多個長度固定的頭,後跟長度可變的正文組成)。在 GatheringByteChannel 介面中定義了類似的集中 寫入操作。

從以下版本開始:
1.4

方法摘要
 long read(ByteBuffer[] dsts)
          將位元組序列從此通道讀入給定的緩衝區。
 long read(ByteBuffer[] dsts, int offset, int length)
          將位元組序列從此通道讀入給定緩衝區的子序列中。
 
從介面 java.nio.channels.ReadableByteChannel 繼承的方法
read
 
從介面 java.nio.channels.Channel 繼承的方法
close, isOpen
 

方法詳細資訊

read

long read(ByteBuffer[] dsts,
          int offset,
          int length)
          throws IOException
將位元組序列從此通道讀入給定緩衝區的子序列中。

調用此方法會嘗試最多從此通道讀取 r 個位元組,其中 r 是給定緩衝區陣列的指定子序列中剩餘的位元組數,也就是

 dsts[offset].remaining()
     + dsts[offset+1].remaining()
     + ... + dsts[offset+length-1].remaining()

假定讀取的位元組序列長度為 n,其中 0 <= n <= r。將此序列的前 dsts[offset].remaining() 個位元組傳輸到緩衝區 dsts[offset] 中,然後將後面的 dsts[offset+1].remaining() 個位元組傳輸到緩衝區 dsts[offset+1] 中,依此類別推,直到將整個位元組序列傳輸到給定緩衝區中。向每個緩衝區中傳輸盡可能多的位元組,因為要保證每個已更新緩衝區(最後一個已更新緩衝區除外)的最終位置等於該緩衝區的限制。

可在任意時間調用此方法。但是如果另一個執行緒已經在此通道上發起了一個讀取操作,則在該操作完成前此方法的調用被阻塞。

參數:
dsts - 要向其中傳輸位元組的緩衝區
offset - 第一個緩衝區(位元組傳輸到該緩衝區中)在緩衝區陣列中的偏移量;必須為非負數並且不能大於 dsts.length
length - 要存取的最大緩衝區數;必須為非負數並且不能大於 dsts.length - offset
返回:
讀取的位元組數,可能為零,如果該通道已到達串流的末尾,則返回 -1
拋出:
IndexOutOfBoundsException - 如果關於 offsetlength 參數的前提不成立
NonReadableChannelException - 如果不允許從此通道進行讀取操作
ClosedChannelException - 如果此通道已關閉
AsynchronousCloseException - 如果正在進行讀取操作時另一個執行緒關閉了此通道
ClosedByInterruptException - 如果正在進行讀取操作時另一個執行緒中斷了當前執行緒,因此關閉了該通道並將當前執行緒設置為中斷狀態
IOException - 如果發生其他 I/O 錯誤

read

long read(ByteBuffer[] dsts)
          throws IOException
將位元組序列從此通道讀入給定的緩衝區。

調用此方法的形式為 c.read(dsts),該調用與以下調用完全相同:

 c.read(dsts, 0,dsts.length);

參數:
dsts - 要向其中傳輸位元組的緩衝區
返回:
讀取的位元組數,可能為零,如果該通道已到達串流的末尾,則返回 -1
拋出:
NonReadableChannelException - 如果不允許從此通道進行讀取操作
ClosedChannelException - 如果此通道已關閉
AsynchronousCloseException - 如果正在進行讀取操作時另一個執行緒關閉了此通道
ClosedByInterruptException - 如果正在進行讀取操作時另一個執行緒中斷了當前執行緒,因此關閉了該通道並將當前執行緒設置為中斷狀態
IOException - 如果發生其他 I/O 錯誤

JavaTM 2 Platform
Standard Ed. 6

提交錯誤或意見

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