Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala迭代对象以写入文件_Scala_Playframework 2.1_Iterate - Fatal编程技术网

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”方法来清理资源