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

Scala iteratee写入文件

发布时间:2020-12-16 19:24:54 所属栏目:安全 来源:网络整理
导读:我有一个方法保存,它需要一个Iteratee并保存一些数据.在方法内部,数据以 enumerator个字节数组块的形式提供. def save[E](consumer: Iteratee[Array[Byte],E]): Future[E] = { val producer: Enumerator[Array[Byte]] = // ... Iteratee.flatten(producer(co
我有一个方法保存,它需要一个Iteratee并保存一些数据.在方法内部,数据以 enumerator个字节数组块的形式提供.

def save[E](consumer: Iteratee[Array[Byte],E]): Future[E] = {
  val producer: Enumerator[Array[Byte]] = // ...
  Iteratee.flatten(producer(consumer)).run
}

通缉:调用save以使其将数据写入FileOutputStream.

我尝试了以下但不确定这是否可行:

def writeToStream(s: OutputStream) =
  Iteratee.foreach((e: Array[Byte]) => s.write(e)).
    mapDone(r => { s.close(); r })
save(writeToStream(new FileOutputStream(myFile)))

问题:这是应该做的吗?我担心这不会总是关闭流(例外情况).

我正在使用Play Framework 2.1中的Play Framework Iteratee库(使用Scala期货).

解决方法

Iteratee的scaladocs说,“生产者”而不是迭代者负责处理资源:

The Iteratee does not do any resource management (such as closing streams); the producer pushing stuff into the Iteratee has that responsibility.

您可能成功使用Enumerator中的“onDoneEnumerating”方法来清理资源.

Scaladoc Iteratee

(编辑:李大同)

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

    推荐文章
      热点阅读