더북(TheBook)

use 함수 블록을 벗어나면 입력 스트림이 자동으로 닫혀야 하기 때문에 더 이상 스트림을 쓸 수 없다.따라서 다음 예제와 같이 lineSequence로 시퀀스를 만들고 use 블록의 밖에서 이 시퀀스를 사용하는 코드는 컴파일은 되지만 실행 시점에 IOException: Stream Closed 오류가 발생한다.

val lines: Sequence<String> = File("myFile.txt")
    .inputStream()
    .use {
        it.bufferedReader()
          .lineSequence()
    }

lines.forEach(::println)

시퀀스의 내용을 나중에 사용하려면 use 블록을 벗어나기 전에 스트림을 강제로 계산해야 한다.

val lines: List<String> = File("myFile.txt")
    .inputStream()
    .use {
        it.bufferedReader()
          .lineSequence()
          .toList()
    }

lines.forEach(::println)
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.