자바 EOF 관련 (feat.BOJ 10951번)

msriver·2020년 5월 28일
0

알고리즘/자료구조

목록 보기
4/20

EOF?

End of File 의 줄임말이다. 말 그대로 파일의 끝을 나타낸다.

파일은 그 끝을 알 수 있다. -1을 반환하기 때문이다.
키보드를 통한 입력에서도 EoF를 발생시킬 수 있는데 윈도우 CMD같은 경우 컨트롤 + z 를 누르고 엔터 딱 쳐주면 EoF가 발생한단다.

EOF(End Of File)
운영체제에서 파일의 끝을 탐지하는 방법은 운영체제마다 약간씩 다릅니다.
하지만 C언어는 운영체제와 상관없이, 파일의 끝에 도달했을 때 언제나 특별한 값을 반환하도록 합니다.
그 값을 EOF(End Of File)라고 하며, 실제로 이 값은 -1을 나타냅니다.
파일뿐만 아니라 키보드를 통한 입력 시에도 입력의 끝을 알려주는 방법이 필요합니다.

대부분의 유닉스(UNIX) 시스템에서는 라인의 시작 위치에서 Ctrl+D를 누르면 EOF를 발생시킬 수 있습니다.
윈도우 명령창에서는 해당 라인의 어디에서든 Ctrl+Z를 누르고 나서 Enter를 누르면 EOF를 발생시킬 수 있습니다.

TCPSchool.com 에서 발췌해왔다.

그래서 뭐 어떻게하라고?

지금까지 내가 알고리즘 문제를 풀기 위해 사용해본 자바의 입력방법은 2가지다.
1. Scanner
2. BufferedReader

Scanner는 BufferedReader보다 좀더 편하다. 대신 속도가 느리다.
간단한 문제들을 풀땐 Scanner만 사용해도 문제가 없지만
입력을 많이 받는 경우에는 꽤 속도차이가 많이 난다.

위 두개가 EoF를 처리하는 방식이 다르다.
Scanner는 hasNextLine() 메서드를 사용하여 더 이상 읽어들일 라인이 없다면 false를 반환한다.

Scanner sc = new Scanner(System.in);
while(sc.hasNextLine()){
	(내용들....)
}

BufferedReader의 readLine()은 true false같은 boolean값이 아닌 null을 반환한다.

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String str = "";
while( (str=br.readLine()) != null ) {
	(내용들....)
}
profile
NOBODY

0개의 댓글