如何“关闭”一个流?

5

我正在使用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)?

1个回答

1
你可以通过追加另一个Stream来获得.whenDone行为。这使得代码更具表现力,也可以在其他情况下使用。这是一种方法,但我想离完美还有很远的路要走。
def closeStream: Stream[Nothing] = {
  reader.close
  Stream.Empty
}

Stream.continually(reader.readLine).takeWhile(_ != null) #::: closeStream

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接