"关闭"一个流?

Dim*_*ima 5 io scala stream

我正在从这样的java中读取文本BufferedReader:

Stream.continually(reader.readLine).takeWhile { 
   case null => reader.close; false
   case _ => true
}
Run Code Online (Sandbox Code Playgroud)

这有效,但对我来说似乎有点笨拙.我希望能有像.whenDoneStream,这样我就可以告诉它整个事情后关闭读者被消耗掉,然后就去做.takeWhile(_ != null).

有什么方法可以做到这一点我不知道吗?或者,也许,更好的方法来从Java得到线流Reader(如果它是一个InputStream,我只是做Source.fromInputStream了例子,但似乎并没有成为同等Reader......注意,这只能部分地解决但问题是,因为人们可能想与其他"可关闭的"对象做同样的事情 - ResultSet比如说一个例子)?

Pim*_*erk 1

您可以.whenDone通过附加另一个来获得该行为Stream。这使得代码更具表现力,也可以用于其他情况。这是一些东西,但我认为远非完美。

def closeStream: Stream[Nothing] = {
  reader.close
  Stream.Empty
}

Stream.continually(reader.readLine).takeWhile(_ != null) #::: closeStream
Run Code Online (Sandbox Code Playgroud)