EOF(End Of File)
EOF(End Of File)은 데이터 소스로부터 더 이상 읽을 수 있는 데이터가 없음을 의미한다.
Scanner와 BufferedReader 두 클래스의 EOF 처리를 알아보자.
Scanner 보다 BufferedReader 가 성능면에서 우월하다.
Scanner
Scanner sc = new Scanner(System.in);
while(sc.hasNextLine()) {
sc.nextLine();
}
while(sc.hasNext()) {
sc.next();
}
BufferedReader
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String input = "";
// 1
while((input = br.readLine()) != null) { ... }
// 2
while((input = br.readLine()) != null && !input.isEmpty()) { ... }
// 3
while(!(input = br.readLine()).equals("")) { ... }
1번코드는 백준 사이트처럼 입력 자체가파일로 들어온다면EOF를 정상적으로 처리가능하다. 하지만 IntelliJ같은 IDE에서는 입력의 끝을 알 수 없다. (EOF를 찾지 못해 프로그램이 끝나지 않는다.)2번코드는 1번 코드의 문제를 보완(?)할 수 있다. 입력의 끝에Enter를 한 번 더 입력하면 그 입력을EOF로 판별하여 처리한다.3번코드는 역으로 IDE에서는Enter로EOF를 찾을 수 있지만, 백준 사이트처럼 입력 자체가파일이라면RuntimeError가 뜬다. (읽을 라인이 없는데 읽은 후, equals()를 수행하기 때문이다.)
IDE 터미널 창에서는 입력의 끝이 없다.입력을 계속 기다리는 상태이기 때문에, EOF를 명시해주지 않으면 프로그램이 끝나지 않게 된다.
반면 파일에서는, 입력의 끝이 파일 내에 저장되어 있으므로 별도로 EOF를 명시하지 않아도 된다.
결론은 맘 편한 2번 코드를 쓰자...
'Language > Java' 카테고리의 다른 글
| 객체지향 프로그래밍(OOP)의 특징(4)과 설계 원칙(5) (0) | 2021.05.14 |
|---|---|
| [Java] 정규 표현식(Regular Expression) (0) | 2021.05.04 |
| [Java] 얕은 복사(Shallow Copy), 깊은 복사(Deep Copy) (0) | 2021.03.23 |
| [Java] Optional<T> Class 옵셔널 (0) | 2021.03.19 |
| [Java] Stream API - 3. 스트림 최종연산 (0) | 2021.03.16 |