AsynchronousSocketChannel.Read 方法

定义

重载

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 是给定缓冲区数组的指定子序列中剩余的字节总数,即,

<blockquote>

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

</blockquote>

在尝试读取时。

假设读取长度 n 的字节序列,其中 0 < n <= r. 最多将此序列的第一dsts[offset].remaining()个字节传输到缓冲区dsts[offset]中,直到dsts[offset+1].remaining()dsts[offset+1]将整个字节序列传输到给定缓冲区,直到将整个字节序列传输到给定缓冲区为止。 将尽可能多的字节传输到每个缓冲区中,因此,每个更新缓冲区(上次更新的缓冲区除外)的最终位置保证等于该缓冲区的限制。 基础操作系统可能会对 I/O 操作中使用的缓冲区数施加限制。 如果缓冲区数(剩余字节数)超过此限制,则会使用操作系统允许的最大缓冲区数执行 I/O 操作。

如果指定了超时,并且操作完成前的超时时间过长,则会完成异常 InterruptedByTimeoutException。 如果出现超时,并且实现无法保证未读取字节,或者不会从通道读取到给定缓冲区中,则进一步尝试从通道读取将导致引发非特定运行时异常。

适用于 . 的 java.nio.channels.AsynchronousSocketChannel.read(java.nio.ByteBuffer[], int, int, long, java.util.concurrent.TimeUnit, A, java.nio.channels.CompletionHandler<java.lang.Long, ? super A>)Java 文档

本页的某些部分是根据 Android 开放源代码项目创建和共享的工作进行的修改,并根据 Creative Commons 2.5 属性许可证中所述的术语使用。

适用于

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) 该方法相同。

适用于 . 的 java.nio.channels.AsynchronousSocketChannel.read(java.nio.ByteBuffer, long, java.util.concurrent.TimeUnit, A, java.nio.channels.CompletionHandler<java.lang.Integer, ? super A>)Java 文档

本页的某些部分是根据 Android 开放源代码项目创建和共享的工作进行的修改,并根据 Creative Commons 2.5 属性许可证中所述的术语使用。

适用于

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

参数

返回

实现

属性

注解

适用于 . 的 java.nio.channels.AsynchronousSocketChannel.read(java.nio.ByteBuffer)Java 文档

本页的某些部分是根据 Android 开放源代码项目创建和共享的工作进行的修改,并根据 Creative Commons 2.5 属性许可证中所述的术语使用。

适用于

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

参数

attachment
Object

实现

属性

注解

适用于 . 的 java.nio.channels.AsynchronousSocketChannel.read(java.nio.ByteBuffer, A, java.nio.channels.CompletionHandler<java.lang.Integer, ? super A>)Java 文档

本页的某些部分是根据 Android 开放源代码项目创建和共享的工作进行的修改,并根据 Creative Commons 2.5 属性许可证中所述的术语使用。

适用于