public interface AsynchronousByteChannel extends AsynchronousChannel
某些频道在任何给定的时间可能不允许多于一个读或写。 如果线程在先前的读取操作完成之前调用读取方法,那么将抛出一个ReadPendingException
。 类似地,如果在先前写入完成之前调用了写入方法,则抛出WritePendingException
。 其他类型的I / O操作是否可以与读取操作同时进行取决于通道的类型。
请注意, ByteBuffers
对于多个并发线程不能使用。 当启动读或写操作时,必须注意确保在操作完成之前不访问缓冲区。
Modifier and Type | Method and Description |
---|---|
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)
从给定的缓冲区向该通道写入一个字节序列。
|
close
<A> void read(ByteBuffer dst, A attachment, CompletionHandler<Integer,? super A> handler)
该方法启动异步读取操作,以从该通道读取到给定缓冲器中的字节序列。 handler
参数是在读取操作完成(或失败)时调用的完成处理程序。 传递给完成处理程序的结果是读取的字节数或-1
如果由于通道已达到流出端,则不能读取字节。
读取操作可以从通道读取r个字节,其中r是缓冲器中剩余的字节数,即在dst.remaining()
读取时为dst.remaining()。 其中r为0,读操作立即完成,结果为0
而不启动I / O操作。
假设读取长度为n的字节序列,其中88416675767076 < n <= r 。 该字节序列将被传送到缓冲器中,使序列中的第一个字节处于索引p ,最后一个字节处于索引p + n - 1 ,其中p是执行读取时缓冲区的位置。 完成后,缓冲区的位置将等于p + n ; 其限制将不会改变。
缓冲区不能安全地被多个并发线程使用,因此在操作完成之前,请注意不要访问缓冲区。
可以随时调用此方法。 某些渠道类型在任何给定时间可能不允许多于一个读取。 如果线程在先前的读取操作完成之前启动了读取操作,那么将抛出一个ReadPendingException
。
A
-
A
的类型
dst
- 要传输字节的缓冲区
attachment
- 要附加到I / O操作的对象;
可以是null
handler
- 完成处理程序
IllegalArgumentException
- 如果缓冲区是只读的
ReadPendingException
- 如果通道不允许多于一个读取未完成,并且以前的读取尚未完成
ShutdownChannelGroupException
-如果信道与相关联group
已终止
Future<Integer> read(ByteBuffer dst)
该方法启动异步读取操作,以从该通道读取到给定缓冲器中的字节序列。 该方法的行为方式与read(ByteBuffer,Object,CompletionHandler)
方法完全相同,不同之处在于,该方法不是指定完成处理程序,而是返回一个Future
待处理结果的Future
。 Future
的get
方法返回读取的字节数或-1
如果没有字节可以读取,因为通道已经达到流终止。
dst
- 要传输字节的缓冲区
IllegalArgumentException
- 如果缓冲区是只读的
ReadPendingException
- 如果通道不允许多个读取未完成,并且以前的读取尚未完成
<A> void write(ByteBuffer src, A attachment, CompletionHandler<Integer,? super A> handler)
该方法启动异步写入操作,以从给定的缓冲区向该通道写入字节序列。 handler
参数是在写操作完成(或失败)时调用的完成处理程序。 传递给完成处理程序的结果是写入的字节数。
写入操作可以写入r字节到通道,其中r是缓冲区中剩余的字节数,即在src.remaining()
写入时为src.remaining()。 其中r为0,写操作立即完成,结果为0
而不启动I / O操作。
假设写入长度为n的字节序列,其中0 < n <= r 。 该字节序列将从索引p开始从缓冲区传送,其中p是执行写入时的缓冲区的位置; 写入的最后一个字节的索引将为p + n - 1 。 完成后,缓冲区的位置将等于p + n ; 其限制将不会改变。
缓冲区不能安全地被多个并发线程使用,因此在操作完成之前,请注意不要访问缓冲区。
可以随时调用此方法。 某些频道类型可能不允许在任何给定时间多出一个写入。 如果线程在先前写入操作完成之前启动写入操作,则会抛出WritePendingException
。
A
-
A
的类型
src
- 要检索字节的缓冲区
attachment
- 要附加到I / O操作的对象;
可以是null
handler
- 完成处理程序对象
WritePendingException
- 如果通道不允许多个写入未完成,并且以前的写入尚未完成
ShutdownChannelGroupException
-如果信道与相关联group
已终止
Future<Integer> write(ByteBuffer src)
该方法启动异步写入操作,以从给定的缓冲区向该通道写入字节序列。 该方法的行为方式与write(ByteBuffer,Object,CompletionHandler)
方法完全相同,不同的是,该方法不是指定完成处理程序,而是返回一个Future
待处理结果的Future
。 Future
的get
方法返回写入的字节数。
src
- 要检索字节的缓冲区
WritePendingException
- 如果通道不允许多个写入未完成,并且以前的写入尚未完成
Submit a bug or feature
For further API reference and developer documentation, see Java SE Documentation. That documentation contains more detailed, developer-targeted descriptions, with conceptual overviews, definitions of terms, workarounds, and working code examples.
Copyright © 1993, 2014, Oracle and/or its affiliates. All rights reserved.