2013-08-28 33 views
3

我是scala的新手,對流關閉機制並不熟悉。我寫了一些這樣的代碼。Scala會自動關閉InputStream嗎?

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?

回答

2

總之 - 沒有。 createBufferedSource給定close函數創建BufferedSource,但從來沒有要求既不reset不是close

0

可能是這個帖子會有所幫助: Scala: 「using」 function

它看起來類似於C#使用聲明,我覺得很方便。

+0

如果您需要一個一致的資源管理解決方案,請參閱[scala-arm](http://jsuereth.com/scala-arm/) –