我正在从java BufferedReader
读取文本,如下所示:
Stream.continually(reader.readLine).takeWhile {
case null => reader.close; false
case _ => true
}
这有效,但对我来说似乎有点笨拙。我希望Stream
上有类似.whenDone
的东西,这样我就可以告诉它在整个事情被消耗后关闭阅读器,然后做.takeWhile(_ != null)
。
有什么方法可以做到我不知道的吗?或者,也许是从java Reader
获取行流的更好方法(如果是InputStream
,例如我可以做Source.fromInputStream
,但似乎没有等效的Reader
...请注意,这只能部分解决问题,因为人们可能想对其他"可关闭"对象执行相同的操作 - 例如ResultSet
)?
您可以通过附加另一个Stream
来获取.whenDone
行为。这使得代码更具表现力,也可以在其他情况下使用。这是某种东西,但我想远非完美。
def closeStream: Stream[Nothing] = {
reader.close
Stream.Empty
}
Stream.continually(reader.readLine).takeWhile(_ != null) #::: closeStream