将自动scala关闭InputStream



我是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,但从不调用resetclose

也许这篇文章会有所帮助:Scala:"使用"函数。

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

相关内容

  • 没有找到相关文章

最新更新