【问题标题】:Should I close Streams created with java.nio.file.Files.newInputStream?我应该关闭用 java.nio.file.Files.newInputStream 创建的流吗?
【发布时间】:2015-03-18 20:34:25
【问题描述】:

在流教程中,没有提到关闭从Files.newInputStream( path ) 获得的流。只是有些晦涩:

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

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

【问题讨论】:

  • 未关闭,它似乎为流提供的每个文件占用了一个文件描述符......这真的不是你可能想要处理大目录的。

标签: java stream nio2


【解决方案1】:

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

来自InterruptibleChannel 文档:

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

【讨论】:

【解决方案2】:

您可以使用新的资源尝试选项方便地做到这一点。

try(/*initialize resources here*/)
{
}

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-12-22
    • 1970-01-01
    • 1970-01-01
    • 2013-08-05
    • 2011-09-01
    • 2023-01-06
    • 1970-01-01
    相关资源
    最近更新 更多