- 所有超级接口:
-
AutoCloseable
,Channel
,Closeable
- 所有已知子接口:
-
AsynchronousByteChannel
-
Future
<V> operation(...) -
void operation(... A attachment,
CompletionHandler
<V,? super A> handler)
CompletionHandler
来消耗许多I/O操作的结果的情况非常重要。
在第一种形式中,可以使用Future
接口定义的方法来检查操作是否已完成,等待其完成,并检索结果。在第二种形式中,当I/O操作完成或失败时,将调用CompletionHandler
来消耗I/O操作的结果。
实现此接口的通道是异步可关闭的:如果通道上有未完成的I/O操作,并且调用了通道的close
方法,则I/O操作将失败,并引发异常AsynchronousCloseException
。
异步通道可安全地供多个并发线程使用。一些通道实现可能支持并发读取和写入,但可能不允许在任何给定时间有多个读取和写入操作处于未完成状态。
取消
Future
接口定义了cancel
方法来取消执行。这会导致所有等待I/O操作结果的线程抛出CancellationException
。底层I/O操作是否可以取消高度取决于实现,因此未指定。如果取消导致通道或其连接的实体处于不一致状态,则通道将进入实现特定的错误状态,阻止进一步尝试启动与被取消操作相似的I/O操作。例如,如果取消读取操作,但实现无法保证已从通道读取字节,则会将通道置于错误状态;进一步尝试启动read
操作将导致抛出未指定的运行时异常。类似地,如果取消写入操作,但实现无法保证已向通道写入字节,则后续尝试启动write
将失败,并引发未指定的运行时异常。
如果使用 mayInterruptIfRunning
参数调用cancel
方法,则可以通过关闭通道来中断I/O操作。在这种情况下,所有等待I/O操作结果的线程都会抛出CancellationException
,通道上的任何其他未完成的I/O操作都将以异常AsynchronousCloseException
完成。
如果调用cancel
方法取消读取或写入操作,则建议丢弃所有用于I/O操作的缓冲区,或者在通道保持打开状态时确保不访问这些缓冲区。
- 自版本:
- 1.7
-
Method Summary
-
Method Details
-
close
关闭此通道。此通道上的所有未完成的异步操作将以异常
AsynchronousCloseException
完成。通道关闭后,进一步尝试启动异步I/O操作将立即完成,并导致ClosedChannelException
。此方法的行为与
Channel
接口指定的完全一致。- 指定者:
-
close
在接口AutoCloseable
- 指定者:
-
close
在接口Channel
- 指定者:
-
close
在接口Closeable
- 抛出:
-
IOException
- 如果发生I/O错误
-