-
- All Superinterfaces:
-
AutoCloseable
,Channel
,Closeable
- All Known Subinterfaces:
-
AsynchronousByteChannel
public interface AsynchronousChannelextends Channel
支持异步I / O操作的通道。 异步I / O操作通常采用以下两种形式之一:Future
<V> operation(...)void operation(... A attachment,
CompletionHandler
<V,? super A> handler)
CompletionHandler
来消耗许多I / O操作的结果的情况,附件很重要。在第一种形式中,
Future
接口定义的方法可用于检查操作是否已完成,等待其完成,以及检索结果。 在第二种形式中,调用CompletionHandler
以在完成或失败时使用I / O操作的结果。实现此接口的通道是异步可关闭的 :如果通道上的I / O操作未完成且调用了通道的
close
方法,则I / O操作将失败,异常为AsynchronousCloseException
。异步通道可以安全地由多个并发线程使用。 某些通道实现可能支持并发读取和写入,但可能不允许在任何给定时间进行多次读取和一次写入操作。
消除
Future
接口定义了取消执行的cancel
方法。 这会导致等待I / O操作结果的所有线程抛出CancellationException
。 是否可以取消基础I / O操作是高度特定于实现的,因此未指定。 如果取消使信道或其所连接的实体处于不一致状态,则通道将进入特定于实现的错误状态 ,以防止进一步尝试启动类似于已取消操作的I / O操作。 例如,如果读取操作被取消但实现不能保证尚未从通道读取字节,则它将通道置于错误状态; 进一步尝试启动read
操作会导致抛出未指定的运行时异常。 类似地,如果取消写操作但实现不能保证字节尚未写入通道,则后续尝试启动write
将失败,并带有未指定的运行时异常。其中
cancel
方法与调用mayInterruptIfRunning
参数集true
则I / O操作可以通过关闭通道被中断。 在这种情况下,等待I / O操作结果的所有线程抛出CancellationException
以及通道上未完成的任何其他I / O操作,但异常为AsynchronousCloseException
。如果调用
cancel
方法取消读取或写入操作,则建议丢弃或注意I / O操作中使用的所有缓冲区,以确保在通道保持打开状态时不访问缓冲区。- 从以下版本开始:
- 1.7
-
-
方法详细信息
-
close
void close() throws IOException
关闭此频道。此通道上的任何未完成的异步操作都将完成,但异常为
AsynchronousCloseException
。 关闭通道后,将立即完成启动异步I / O操作的尝试,原因为ClosedChannelException
。- Specified by:
-
close
在界面AutoCloseable
- Specified by:
-
close
,界面Channel
- Specified by:
-
close
,界面Closeable
- 异常
-
IOException
- 如果发生I / O错误
-
-