【问题标题】:Would scala close the InputStream automatically?scala 会自动关闭 InputStream 吗?
【发布时间】:2013-08-28 02:28:27
【问题描述】:

我是 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 块中的输入流吗?

【问题讨论】:

    标签: scala stream


    【解决方案1】:

    简而言之-不。 createBufferedSource 使用给定的close 函数创建BufferedSource,但从不调用resetclose

    【讨论】:

    • 在这种情况下如何关闭scala中的输入流?
    【解决方案2】:

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

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

    【讨论】:

    • 如果您需要一致的资源管理解决方案,请查看scala-arm
    猜你喜欢
    • 2017-02-25
    • 1970-01-01
    • 1970-01-01
    • 2021-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-18
    相关资源
    最近更新 更多