Scala迭代对象以写入文件
我有一个方法Scala迭代对象以写入文件,scala,playframework-2.1,iterate,Scala,Playframework 2.1,Iterate,我有一个方法save,它接受Iterateeit,并将一些数据保存到it。在该方法中,数据作为一个字节数组块提供 def save[E](使用者:Iteratee[Array[Byte],E]):Future[E]={ val生产者:枚举器[数组[字节]]=/。。。 Iteratee.flant(生产者(消费者)).run } 需要:调用保存,以便将数据写入文件输出流 我尝试了以下方法,但不确定这是否是正确的方法: def writeToStream(s:OutputStream)= Iter
save
,它接受Iteratee
it
,并将一些数据保存到it
。在该方法中,数据作为一个字节数组块提供
def save[E](使用者:Iteratee[Array[Byte],E]):Future[E]={
val生产者:枚举器[数组[字节]]=/。。。
Iteratee.flant(生产者(消费者)).run
}
需要:调用保存
,以便将数据写入文件输出流
我尝试了以下方法,但不确定这是否是正确的方法:
def writeToStream(s:OutputStream)=
Iteratee.foreach((e:Array[Byte])=>s.write(e))。
mapDone(r=>{s.close();r})
保存(writeToStream(新文件输出流(myFile)))
问题:应该这样做吗?我担心这不会总是关闭流(例外情况)
我使用的是2.1版的Play Framework Iteratee库(它使用Scala futures)。Iteratee的scaladocs说,处理资源是“生产者”的责任,而不是Iteratee: 迭代对象不进行任何资源管理(例如关闭流);把东西推到迭代对象中的制作人有这个责任 您可能会成功地使用枚举器中的“OnDoneEnuming”方法来清理资源