scala会自动关闭InputStream吗?

时间:2013-08-28 02:28:27

标签: scala stream

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

def loadResourceAsString(path: String) = {

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

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

}

我在scala源代码中找到了这个。 Source将返回一个BufferedSource,它覆盖close方法以关闭输入流。

def fromInputStream(is: InputStream)(implicit codec: Codec): BufferedSource =
  createBufferedSource(is, reset = () => fromInputStream(is)(codec), close = () => is.close())(codec)

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

或者,我是否应该像java一样明确关闭 finally 块中的输入流?

2 个答案:

答案 0 :(得分:2)

总之 - 没有。 createBufferedSource使用给定的BufferedSource函数创建close,但从不为reset调用close

答案 1 :(得分:0)

可能是这篇文章会有所帮助: Scala: “using” function

它看起来类似于C#using语句,我觉得非常方便。