我有一个名为
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的迭代器库(它使用Scala futures)。