"靠近"一条小溪?

时间:2016-03-02 11:56:35

标签: scala io stream

我正在阅读java BufferedReader中的文字,如下所示:

Stream.continually(reader.readLine).takeWhile { 
   case null => reader.close; false
   case _ => true
}

这有效,但对我来说似乎有些笨拙。我希望在.whenDone上有类似Stream的内容,这样我就可以告诉它在整个内容被消耗后关闭读者,然后只做.takeWhile(_ != null)

有什么方法可以做到这一点我不知道吗?或者,也许是从java Reader获取行流的更好方法(如果它是InputStream,我可以做Source.fromInputStream例如,但似乎没有是Reader的等价物...注意,这只会部分地解决问题,因为人们可能想要与其他"可关闭的对象 - {{1}做同样的事情例如)?

1 个答案:

答案 0 :(得分:1)

您可以通过附加另一个Stream来获得def closeStream: Stream[Nothing] = { reader.close Stream.Empty } Stream.continually(reader.readLine).takeWhile(_ != null) #::: closeStream 行为。 这使代码更具表现力,也可用于其他情况。这是一些东西,但我猜远非完美。

{{1}}