【问题标题】:"close" a Stream?“关闭”一个流?
【发布时间】:2016-06-15 06:22:37
【问题描述】:

我正在阅读来自 java BufferedReader 的文本,如下所示:

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

这可行,但对我来说似乎有点笨拙。我希望在Stream 上有类似.whenDone 的东西,这样我就可以告诉它在整个内容消耗完后关闭阅读器,然后只需执行.takeWhile(_ != null)

有什么我不知道的方法吗?或者,也许是从 java Reader 获取行流的更好方法(例如,如果它是 InputStream,我可以只做 Source.fromInputStream,但似乎没有 @987654329 的等价物@ ...请注意,这只能部分解决问题,因为人们可能想对其他“可关闭”对象做同样的事情——例如ResultSet)?

【问题讨论】:

    标签: scala io stream


    【解决方案1】:

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

    def closeStream: Stream[Nothing] = {
      reader.close
      Stream.Empty
    }
    
    Stream.continually(reader.readLine).takeWhile(_ != null) #::: closeStream
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-08-18
      • 1970-01-01
      • 2010-12-29
      • 1970-01-01
      • 2022-01-03
      • 2013-05-01
      • 2019-09-03
      相关资源
      最近更新 更多