我是scala的新手,不熟悉流关闭机制。我写了一些这样的代码。
def loadResourceAsString(path: String) = {
val is = this.getClass().getResourceAsStream(path)
Source.fromInputStream(is).getLines().mkString("n")
}
我在scala源代码中找到了这个。Source
将返回一个BufferedSource,它覆盖关闭方法以关闭输入流。
def fromInputStream(is: InputStream)(implicit codec: Codec): BufferedSource =
createBufferedSource(is, reset = () => fromInputStream(is)(codec), close = () => is.close())(codec)
如果出现异常,scala会通过自己的机制执行close方法吗?
或者,我应该像java一样显式关闭finally块中的输入流吗?
简而言之,没有。createBufferedSource
使用给定的close
函数创建BufferedSource
,但从不调用reset
和close
也许这篇文章会有所帮助:Scala:"使用"函数。
它看起来类似于C#使用的语句,我觉得它非常方便。