Будет ли 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?
2 ответов:
Короче говоря-нет.
createBufferedSourceсоздаетBufferedSourceс заданнойcloseфункцией, но никогда не вызывает ни дляreset, Ни дляclose
Может быть, этот пост будет полезен: Scala: функция" using " .
Это похоже на C# с помощью оператора, который я нахожу очень удобным.
Comments