2012-12-18 3 views
4

나는 Iterateeit이 걸리는 방법 save가 있고 어떤 데이터는 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))) 

질문 :이 그것을 할하기로했다 방법인가? 나는 이것이 항상 스트림 (예외의 경우)을 닫지는 않을 것이라고 두려워한다.

나는 (Scala 선물을 사용하는) Play Framework 2.1의 Play Framework Iteratee 라이브러리를 사용하고 있습니다. Iteratee에 대한

답변

1

scaladocs이는 "생산자"의 책임이라고 말할하지 iteratee 자원을 처리하기 :

을 Iteratee (예 : 닫는 스트림과 같은) 어떤 자원 관리를하지 않는다; 생산자는 Iteratee에 물건을 밀어 넣어 그 책임을진다.

나중에 열거 자에서 "onDoneEnumerating"메서드를 사용하여 리소스를 정리할 수 있습니다.

Scaladoc Iteratee

관련 문제