AsynchronousSocketChannel.Read 方法
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
多載
| 名稱 | Description |
|---|---|
| Read(ByteBuffer[], Int32, Int32, Int64, TimeUnit, Object, ICompletionHandler) |
從此通道讀取一串位元組到給定緩衝區的子序列中。 |
| Read(ByteBuffer, Int64, TimeUnit, Object, ICompletionHandler) |
從此通道讀取一串位元組到給定的緩衝區。 |
| Read(ByteBuffer) | |
| Read(ByteBuffer, Object, ICompletionHandler) |
Read(ByteBuffer[], Int32, Int32, Int64, TimeUnit, Object, ICompletionHandler)
從此通道讀取一串位元組到給定緩衝區的子序列中。
[Android.Runtime.Register("read", "([Ljava/nio/ByteBuffer;IIJLjava/util/concurrent/TimeUnit;Ljava/lang/Object;Ljava/nio/channels/CompletionHandler;)V", "GetRead_arrayLjava_nio_ByteBuffer_IIJLjava_util_concurrent_TimeUnit_Ljava_lang_Object_Ljava_nio_channels_CompletionHandler_Handler", ApiSince=26)]
[Java.Interop.JavaTypeParameters(new System.String[] { "A" })]
public abstract void Read(Java.Nio.ByteBuffer[]? dsts, int offset, int length, long timeout, Java.Util.Concurrent.TimeUnit? unit, Java.Lang.Object? attachment, Java.Nio.Channels.ICompletionHandler? handler);
[<Android.Runtime.Register("read", "([Ljava/nio/ByteBuffer;IIJLjava/util/concurrent/TimeUnit;Ljava/lang/Object;Ljava/nio/channels/CompletionHandler;)V", "GetRead_arrayLjava_nio_ByteBuffer_IIJLjava_util_concurrent_TimeUnit_Ljava_lang_Object_Ljava_nio_channels_CompletionHandler_Handler", ApiSince=26)>]
[<Java.Interop.JavaTypeParameters(new System.String[] { "A" })>]
abstract member Read : Java.Nio.ByteBuffer[] * int * int * int64 * Java.Util.Concurrent.TimeUnit * Java.Lang.Object * Java.Nio.Channels.ICompletionHandler -> unit
參數
- dsts
- ByteBuffer[]
位元組要傳送到的緩衝區
- offset
- Int32
第一個緩衝區的緩衝區陣列中的偏移量,該緩衝區將位元組傳送到該緩衝區;必須非負且不大於 dsts.length
- length
- Int32
可存取的最大緩衝區數量;必須非負且不大於 dsts.length - offset
- timeout
- Int64
I/O 操作完成的最長時間
- unit
- TimeUnit
論證的時間 timeout 單位
- attachment
- Object
要附加到 I/O 操作上的物件;可以是 null
- handler
- ICompletionHandler
處理者會處理結果
- 屬性
備註
從此通道讀取一串位元組到給定緩衝區的子序列中。 此操作有時稱為 <em>散射讀取</em>,在實作將資料分組為一個或多個固定長度標頭接可變長度主體的區段的網路協定中非常有用。 參數 handler 是一個完成處理程序,當讀取操作完成(或失敗)時會被呼叫。 傳遞給完備處理器的結果是讀取的位元組數,或 -1 若通道已達串流結束,無法讀取位元組。
此方法可從該通道讀取最多 r 位元組,其中 r 為該緩衝區陣列指定子序列中剩餘的位元組總數,即,
<引用>
dsts[offset].remaining()
+ dsts[offset+1].remaining()
+ ... + dsts[offset+length-1].remaining()
</區塊引用>
在嘗試讀取的那一刻。
假設讀取長度 為 n 的位元組序列,其中 0& nbsp;< n <= R。 此序列的前幾個 dsts[offset].remaining() 位元組會被傳送到緩衝 dsts[offset]區,直到接下來 dsts[offset+1].remaining() 的位元組被轉移到緩衝 dsts[offset+1]區,依此類推,直到整個位元組序列被傳送到給定的緩衝區。 每個緩衝區會傳輸盡可能多的位元組,因此除了最後更新的緩衝區外,每個更新緩衝區的最終位置都保證等於該緩衝區的限制。 底層作業系統可能會對 I/O 操作中可使用的緩衝區數量設限。 當緩衝區數量(剩餘位元組)超過此限制時,輸入輸出操作即以作業系統允許的最大緩衝區數執行。
若指定逾時且逾時在操作完成前已過,則該逾時在操作完成時有例外 InterruptedByTimeoutException。 若發生逾時,且實作無法保證位元組未被讀取或不會從通道讀取到指定緩衝區,則進一步嘗試從通道讀取時會拋出一個不特定的執行時例外。
本頁部分內容為基於 Open Source Project 所創建與分享的作品,並依授權條款所描述的使用進行修改。
適用於
Read(ByteBuffer, Int64, TimeUnit, Object, ICompletionHandler)
從此通道讀取一串位元組到給定的緩衝區。
[Android.Runtime.Register("read", "(Ljava/nio/ByteBuffer;JLjava/util/concurrent/TimeUnit;Ljava/lang/Object;Ljava/nio/channels/CompletionHandler;)V", "GetRead_Ljava_nio_ByteBuffer_JLjava_util_concurrent_TimeUnit_Ljava_lang_Object_Ljava_nio_channels_CompletionHandler_Handler", ApiSince=26)]
[Java.Interop.JavaTypeParameters(new System.String[] { "A" })]
public abstract void Read(Java.Nio.ByteBuffer? dst, long timeout, Java.Util.Concurrent.TimeUnit? unit, Java.Lang.Object? attachment, Java.Nio.Channels.ICompletionHandler? handler);
[<Android.Runtime.Register("read", "(Ljava/nio/ByteBuffer;JLjava/util/concurrent/TimeUnit;Ljava/lang/Object;Ljava/nio/channels/CompletionHandler;)V", "GetRead_Ljava_nio_ByteBuffer_JLjava_util_concurrent_TimeUnit_Ljava_lang_Object_Ljava_nio_channels_CompletionHandler_Handler", ApiSince=26)>]
[<Java.Interop.JavaTypeParameters(new System.String[] { "A" })>]
abstract member Read : Java.Nio.ByteBuffer * int64 * Java.Util.Concurrent.TimeUnit * Java.Lang.Object * Java.Nio.Channels.ICompletionHandler -> unit
參數
- dst
- ByteBuffer
位元組要傳送到的緩衝區
- timeout
- Int64
I/O 操作完成的最長時間
- unit
- TimeUnit
論證的時間 timeout 單位
- attachment
- Object
要附加到 I/O 操作上的物件;可以是 null
- handler
- ICompletionHandler
處理者會處理結果
- 屬性
備註
從此通道讀取一串位元組到給定的緩衝區。
此方法會啟動非同步讀取操作,將該通道的一串位元組讀取到指定緩衝區。 參數 handler 是一個完成處理程序,當讀取操作完成(或失敗)時會被呼叫。 傳遞給完備處理器的結果是讀取的位元組數,或 -1 若通道已達串流結束,無法讀取位元組。
若指定逾時且逾時時間在操作完成前已過,則該操作完成,但有例外 InterruptedByTimeoutException。 若發生逾時,且實作無法保證位元組未被讀取或不會從通道讀取到指定緩衝區,則繼續嘗試從通道讀取時會拋出一個不特定的執行時例外。
否則,這個方法的運作方式和原本的方法 AsynchronousByteChannel#read(ByteBuffer,Object,CompletionHandler) 一樣。
本頁部分內容為基於 Open Source Project 所創建與分享的作品,並依授權條款所描述的使用進行修改。
適用於
Read(ByteBuffer)
[Android.Runtime.Register("read", "(Ljava/nio/ByteBuffer;)Ljava/util/concurrent/Future;", "GetRead_Ljava_nio_ByteBuffer_Handler", ApiSince=26)]
public abstract Java.Util.Concurrent.IFuture? Read(Java.Nio.ByteBuffer? dst);
[<Android.Runtime.Register("read", "(Ljava/nio/ByteBuffer;)Ljava/util/concurrent/Future;", "GetRead_Ljava_nio_ByteBuffer_Handler", ApiSince=26)>]
abstract member Read : Java.Nio.ByteBuffer -> Java.Util.Concurrent.IFuture
參數
- dst
- ByteBuffer
傳回
實作
- 屬性
備註
Java 文件 java.nio.channels.AsynchronousSocketChannel.read(java.nio.ByteBuffer)。
本頁部分內容為基於 Open Source Project 所創建與分享的作品,並依授權條款所描述的使用進行修改。
適用於
Read(ByteBuffer, Object, ICompletionHandler)
[Android.Runtime.Register("read", "(Ljava/nio/ByteBuffer;Ljava/lang/Object;Ljava/nio/channels/CompletionHandler;)V", "", ApiSince=26)]
[Java.Interop.JavaTypeParameters(new System.String[] { "A" })]
public void Read(Java.Nio.ByteBuffer? dst, Java.Lang.Object? attachment, Java.Nio.Channels.ICompletionHandler? handler);
[<Android.Runtime.Register("read", "(Ljava/nio/ByteBuffer;Ljava/lang/Object;Ljava/nio/channels/CompletionHandler;)V", "", ApiSince=26)>]
[<Java.Interop.JavaTypeParameters(new System.String[] { "A" })>]
abstract member Read : Java.Nio.ByteBuffer * Java.Lang.Object * Java.Nio.Channels.ICompletionHandler -> unit
override this.Read : Java.Nio.ByteBuffer * Java.Lang.Object * Java.Nio.Channels.ICompletionHandler -> unit
參數
- dst
- ByteBuffer
- attachment
- Object
- handler
- ICompletionHandler
實作
- 屬性
備註
本頁部分內容為基於 Open Source Project 所創建與分享的作品,並依授權條款所描述的使用進行修改。