-
- All Superinterfaces:
-
AsynchronousChannel
,AutoCloseable
,Channel
,Closeable
- 所有已知实现类:
-
AsynchronousSocketChannel
public interface AsynchronousByteChannelextends AsynchronousChannel
一个可以读写字节的异步通道。某些频道可能不允许在任何给定时间进行多次读取或写入。 如果线程在先前的读操作完成之前调用read方法,则将抛出
ReadPendingException
。 类似地,如果在前一次写入完成之前调用write方法,则抛出WritePendingException
。 其他类型的I / O操作是否可以与读操作同时进行取决于通道的类型。请注意,
ByteBuffers
不适合多个并发线程使用。 当启动读或写操作时,必须注意确保在操作完成之前不访问缓冲区。
-
-
方法摘要
所有方法 实例方法 抽象方法 变量和类型 方法 描述 Future<Integer>
read(ByteBuffer dst)
从该通道读取一个字节序列到给定的缓冲区。<A> void
read(ByteBuffer dst, A attachment, CompletionHandler<Integer,? super A> handler)
从该通道读取一个字节序列到给定的缓冲区。Future<Integer>
write(ByteBuffer src)
从给定缓冲区向该通道写入一个字节序列。<A> void
write(ByteBuffer src, A attachment, CompletionHandler<Integer,? super A> handler)
从给定缓冲区向该通道写入一个字节序列。-
声明方法的接口 java.nio.channels.AsynchronousChannel
close
-
-
-
-
方法详细信息
-
read
<A> void read(ByteBuffer dst, A attachment, CompletionHandler<Integer,? super A> handler)
从该通道读取一个字节序列到给定的缓冲区。此方法启动异步读取操作,以将此通道中的字节序列读取到给定缓冲区中。
handler
参数是一个完成处理程序,在读取操作完成(或失败)时调用。 传递给完成处理程序的结果是读取的字节数或-1
如果由于通道已到达流末尾而无法读取字节。读操作可以从通道读取最多r个字节,其中r是缓冲区中剩余的字节数,即尝试读取时的
dst.remaining()
。 其中r为0,读取操作立即完成,结果为0
而不启动I / O操作。假设读取长度为n的字节序列,其中
0
<
n<=
r 。 该字节序列将被转移到缓冲器,使得序列中的第一个字节是在索引p和最后一个字节是在索引p+
Ñ-
1
,其中p是该缓冲区的在执行读取的时刻的位置。 完成后,缓冲区的位置将等于p+
n ; 它的限制不会改变。多个并发线程使用缓冲区并不安全,因此在操作完成之前应注意不要访问缓冲区。
可以随时调用此方法。 某些通道类型可能不允许在任何给定时间有多个读取未完成。 如果线程在先前的读操作完成之前启动读操作,则将抛出
ReadPendingException
。- 参数类型
-
A
- 附件的类型 - 参数
-
dst
- 要传输字节的缓冲区 -
attachment
- 要附加到I / O操作的对象; 可以是null
-
handler
- 完成处理程序 - 异常
-
IllegalArgumentException
- 如果缓冲区是只读的 -
ReadPendingException
- 如果通道不允许多个读取未完成且先前的读取尚未完成 -
ShutdownChannelGroupException
- 如果通道与已终止的group
关联
-
read
Future<Integer> read(ByteBuffer dst)
从该通道读取一个字节序列到给定的缓冲区。此方法启动异步读取操作,以将此通道中的字节序列读取到给定缓冲区中。 该方法的行为方式与
read(ByteBuffer,Object,CompletionHandler)
方法完全相同,只是该方法返回表示挂起结果的Future
,而不是指定完成处理程序。Future
的get
方法返回读取的字节数,如果由于通道已到达流末尾而无法读取字节,则返回-1
。- 参数
-
dst
- 要传输字节的缓冲区 - 结果
- 表示操作结果的Future
- 异常
-
IllegalArgumentException
- 如果缓冲区是只读的 -
ReadPendingException
- 如果通道不允许多个读取未完成且先前的读取尚未完成
-
write
<A> void write(ByteBuffer src, A attachment, CompletionHandler<Integer,? super A> handler)
从给定缓冲区向该通道写入一个字节序列。此方法启动异步写入操作,以从给定缓冲区向此通道写入字节序列。
handler
参数是在写入操作完成(或失败)时调用的完成处理程序。 传递给完成处理程序的结果是写入的字节数。写操作可以将最多r个字节写入通道,其中r是缓冲区中剩余的字节数,即尝试写入时的
src.remaining()
。 其中r为0,写操作立即完成,结果为0
而不启动I / O操作。假设写入长度为n的字节序列,其中
0
<
n<=
r 。 该字节序列将从索引p开始从缓冲区传输,其中p是执行写入时缓冲区的位置; 写入的最后一个字节的索引将是p+
n-
1
。 完成后,缓冲区的位置将等于p+
n ; 它的限制不会改变。多个并发线程使用缓冲区并不安全,因此在操作完成之前应注意不要访问缓冲区。
可以随时调用此方法。 某些通道类型可能不允许在任何给定时间多于一个写入。 如果线程在先前的写操作完成之前启动写操作,则将抛出
WritePendingException
。- 参数类型
-
A
- 附件的类型 - 参数
-
src
- 要从中检索字节的缓冲区 -
attachment
- 要附加到I / O操作的对象; 可以是null
-
handler
- 完成处理程序对象 - 异常
-
WritePendingException
- 如果通道不允许多个写入未完成且前一次写入尚未完成 -
ShutdownChannelGroupException
- 如果通道与已终止的group
关联
-
write
Future<Integer> write(ByteBuffer src)
从给定缓冲区向该通道写入一个字节序列。此方法启动异步写入操作,以从给定缓冲区向此通道写入字节序列。 该方法的行为方式与
write(ByteBuffer,Object,CompletionHandler)
方法完全相同,只是该方法返回表示挂起结果的Future
,而不是指定完成处理程序。Future
的get
方法返回写入的字节数。- 参数
-
src
- 要从中检索字节的缓冲区 - 结果
- 表示操作结果的Future
- 异常
-
WritePendingException
- 如果通道不允许多个写入未完成且前一次写入尚未完成
-
-