BufferedReader는 입력 값을 바이트스트림에서 문자스트림으로 변환해주는
InputStreamReader와 입력 장치를 통해 값을 받아주는 System.in을 사용한다.
위 사진처럼 BufferedReader을 사용하는 과정에서 br.readLine()을 사용하니 에러가 나타났다.
error : unreported exception IOException; must be caught or declared to be thrown
show context Actions를 봐보니 아래와 같이 throws IOException을 해주거나 try-catch문을 통해
예외처리를 해줘야 에러가 발생하지 않는다고 되어 있다.
주로 값을 입력 받을 때 Scanner을 사용하는 편이었는데, 처리 속도 차이로 인해
BufferedReader을 사용에 익숙해지기 위한 과정에서 처음 마주한 문제였다.
readLine 메서드가 어떻게 사용되는 지 알기 위해 함수 호출을 찾아보았다.
(인텔리제이에서 함수호출 단축키로는 Ctrl + alt + h)
synchronized(lock) 메서드 다음으로 루프문을 계속해서 돌고 있다.
해당 메서드 안에 ensureOpen 메서드도 함수 호출을 해보았다.
(in == null) 일 경우, Stream이 닫혀있다고 IOException을 던진다.
in은 BufferReader의 Reader 클래스에 대한 파라미터이다.
여기서 in이 null이라는 건 Reader가 인식되지 않는다는 것인데,
자원이 없는데 read를 하면 프로그램 장애가 발생하기 때문에, 예외처리를 통해 미리 방지하는 것이다.
BufferedReader 클래스의 메소드들은 입출력 에러가 발생할 경우 자체적으로 IOException을 던지도록 정의 되어 있다.
+ 키보드 입력이 NULL이란 것은 inputstream = 0이고,
inputstream = null은 아예 자원이 인식이 되지 않는 것을 의미한다고 한다.
참고 (https://itbeginner2020.tistory.com/27)
'Java' 카테고리의 다른 글
Java_int와 Integer의 차이 (0) | 2022.07.31 |
---|---|
Java_Scanner 버퍼 비우기 (0) | 2022.07.06 |
Java_컬렉션 프레임워크 (0) | 2021.03.02 |
Java_인터페이스 (0) | 2021.02.22 |
Java_추상 클래스 (0) | 2021.02.20 |