Scala iteratee写入文件

时间:2012-12-18 15:01:54

标签: scala playframework-2.1 iterate

我有一个方法save,它接受​​Iteratee it并将一些数据保存到it。在方法内部,数据以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期货)。

1 个答案:

答案 0 :(得分:1)

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

  

Iteratee不进行任何资源管理(例如关闭流);生产者将东西推入Iteratee有责任。

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

Scaladoc Iteratee