加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

斯卡拉 – “关闭”一个流?

发布时间:2020-12-16 18:31:28 所属栏目:安全 来源:网络整理
导读:我正在从 java BufferedReader中读取文本,如下所示: Stream.continually(reader.readLine).takeWhile { case null = reader.close; false case _ = true} 这有效,但对我来说似乎有点笨拙.我希望在Stream上有类似.whenDone之类的内容,这样我就可以告诉它在整
我正在从 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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读