Scala 会自动关闭 InputStream 吗?

Joe*_* Wu 5 scala stream

我是 Scala 的新手,对流关闭机制不熟悉。我写了一些这样的代码。

def loadResourceAsString(path: String) = {

  val is = this.getClass().getResourceAsStream(path)

  Source.fromInputStream(is).getLines().mkString("\n")

}
Run Code Online (Sandbox Code Playgroud)

我在 Scala 源代码中找到了这个。该Source会返回一个BufferedSource其覆盖close方法关闭输入流。

def fromInputStream(is: InputStream)(implicit codec: Codec): BufferedSource =
  createBufferedSource(is, reset = () => fromInputStream(is)(codec), close = () => is.close())(codec)
Run Code Online (Sandbox Code Playgroud)

如果有异常,scala 会通过自己的机制执行close方法吗?

或者,我应该像 java 一样显式关闭finally块中的输入流吗?

1es*_*sha 3

简而言之 - 不。 使用给定函数createBufferedSource创建,但从不调用 for not forBufferedSourcecloseresetclose