我应该关闭用java.nio.file.Files.newInputStream创建的Streams吗?

时间:2015-01-20 14:52:02

标签: java stream nio2

在流教程中,没有关于从Files.newInputStream( path )获得关闭流的说法。只有一些模糊不清:

  

返回的流是否异步关闭和/或   可中断是高度文件系统提供程序特定的因此   未指定。

在这种情况下,什么是“异步”?如果我显式关闭流或另一个线程异步关闭流?

2 个答案:

答案 0 :(得分:3)

您必须像所有其他人一样关闭获得的InputStream。术语“异步可关闭”是指在另一个线程在其上进行I / O操作时被阻塞的能力。

来自InterruptibleChannel文档:

  

实现此接口的通道是异步关闭:如果某个线程在可中断通道上的I / O操作中被阻塞,则另一个线程可能会调用该通道的close方法。这将导致被阻塞的线程收到AsynchronousCloseException。

答案 1 :(得分:0)

您可以使用新的尝试使用资源选项方便地进行操作。

@Override
protected void addResourceHandlers(ResourceHandlerRegistry registry) {
    registry.addResourceHandler("swagger-ui.html").addResourceLocations("classpath:/META-INF/resources/");

    registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/");
}

在try块之后它们将自动关闭。根据需要添加一个渔获。