在流教程中,没有提到关闭从Files.newInputStream( path )
获得的流。只有一些晦涩难懂:
返回的流是否异步关闭和/或 可中断是高度特定于文件系统提供程序的,因此 未指定。
在这种情况下,什么是"异步"?如果我显式关闭流,或者另一个线程异步关闭流?
您绝对必须关闭获得的InputStream
,就像所有其他内容一样。术语"异步关闭"是指在流上的 I/O 操作上阻塞另一个线程时关闭流的能力。
从InterruptibleChannel
文档中:
实现此接口的通道是异步关闭的:如果线程在可中断通道上的 I/O 操作中被阻塞,则另一个线程可能会调用通道的 close 方法。这将导致被阻塞的线程收到异步关闭异常。
您可以使用新的"尝试资源"选项方便地执行此操作。
try(/*initialize resources here*/)
{
}
它们将在 try 块后自动关闭。 根据需要添加捕获。