2013-08-28 1 views
3

나는 스트림 스톱 메커니즘에 익숙하지 않은 스 카와 초보자입니다. 이런 코드를 작성했습니다.scala가 자동으로 InputStream을 닫을까요?

def loadResourceAsString(path: String) = { 

    val is = this.getClass().getResourceAsStream(path) 

    Source.fromInputStream(is).getLines().mkString("\n") 

} 

스칼라 소스 코드에서이를 발견했습니다. Source은 Close 메서드를 오버라이드 (override) 한 BufferedSource를 돌려 주어 입력 스트림을 닫습니다.

def fromInputStream(is: InputStream)(implicit codec: Codec): BufferedSource = 
    createBufferedSource(is, reset =() => fromInputStream(is)(codec), close =() => is.close())(codec) 

예외가있는 경우 자체 메커니즘으로 close 메소드를 실행하겠습니까?

아니면 입력 스트림을 닫아야합니까? 마침내 블록은 java와 똑같은 블록입니까?

답변

2

짧게 - 아니요. createBufferedSource 주어진 close 기능 BufferedSource를 생성,하지만 결코 호출도 할 수 reset하지

0

close이 게시물이 도움이 될 것입니다 위해 : Scala: “using” function.

매우 편리하다고 생각되는 C# 사용 문과 비슷하게 보입니다.

+0

리소스 관리에 일관된 솔루션이 필요한 경우 [scala-arm] (http://jsuereth.com/scala-arm/)도 참조하십시오. –

관련 문제