Будет ли scala автоматически закрывать входной поток?



Я новичок в 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?

535   2  

2 ответов:

Короче говоря-нет. createBufferedSource создает BufferedSource с заданной close функцией, но никогда не вызывает ни для reset, Ни для close

Может быть, этот пост будет полезен: Scala: функция" using " .

Это похоже на C# с помощью оператора, который я нахожу очень удобным.

Comments

    Ничего не найдено.