我是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 块中的输入流?
答案 0 :(得分:2)
总之 - 没有。
createBufferedSource
使用给定的BufferedSource
函数创建close
,但从不为reset
调用close
答案 1 :(得分:0)
可能是这篇文章会有所帮助: Scala: “using” function
它看起来类似于C#using语句,我觉得非常方便。