EOF는 End of File의 약어로, 파일의 끝을 나타내는 특수한 마커이다. 파일에서 더 이상 읽을 내용이 없거나 쓸 내용이 없을 때, EOF 마커가 나타나며, 이는 파일의 끝을 나타내어 프로그램에게 파일의 끝을 인식할 수 있게 한다.
EOF는 주로 파일 읽기나 입력 소스에서 데이터를 읽을 때 사용된다. 예를 들어, 파일의 끝에 도달했을 때 반복문을 종료하는 데 사용할 수 있다. 파일에서 데이터를 읽을 때 EOF를 확인하여 계속해서 읽을지, 아니면 종료할지 결정할 수 있다.
파일의 끝은 파일의 끝 부분이 아닌, 파일에서 더 이상 읽을 데이터가 없는 지점을 나타낸다. 파일에서 EOF를 확인하는 방법은 프로그래밍 언어나 도구에 따라 다를 수 있다. 대표적으로 파일 읽기 함수에서 EOF를 확인하는 방법도 있다.
자바에서는 EOF(End of File)를 확인하는 데 사용되는 메커니즘이 있다. 주로 파일 읽기, 입력 스트림에서 사용된다. 자바에서 EOF를 확인하기 위해 사용되는 주요 메서드와 클래스는 아래와 같다. 한 번 살펴보자.
InputStream.read() 메서드
InputStream 클래스를 사용하여 파일 또는 다른 입력 소스에서 데이터를 읽을 때 read() 메서드를 사용한다. read() 메서드는 더 이상 읽을 데이터가 없을 때 -1을 반환하므로, 이를 이용하여 EOF를 확인할 수 있다.
InputStream inputStream = new FileInputStream("example.txt");
int data;
while ((data = inputStream.read()) != -1) {
// 파일의 끝에 도달하기 전까지 데이터를 읽음
// data에 읽은 바이트가 저장되며, 파일의 끝에 도달하면 -1이 반환됨
}
inputStream.close();
BufferedReader.readLine() 메서드
BufferedReader 클래스를 사용하여 한 줄씩 문자열을 읽을 때 readLine() 메서드를 사용한다. 더 이상 읽을 데이터가 없을 때 null을 반환하므로, 이를 이용하여 EOF를 확인할 수 있다.
BufferedReader bufferedReader = new BufferedReader(new FileReader("example.txt"));
String line;
while ((line = bufferedReader.readLine()) != null) {
// 파일의 끝에 도달하기 전까지 한 줄씩 읽음
// line에 읽은 문자열이 저장되며, 파일의 끝에 도달하면 null이 반환됨
}
bufferedReader.close();
Scanner 클래스
사용자 입력에서 EOF를 확인하는 것은 주로 특정 조건에 도달할 때까지 입력을 계속해서 받는 방식으로 이루어진다. 자바에서는 보통 Scanner 클래스를 사용하여 사용자로부터 입력을 받는다.
import java.util.Scanner;
public class UserInputEOFExample {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("Enter lines of text (Ctrl+D or Ctrl+Z to exit)");
while (scanner.hasNextLine()) {
// hasNextLine()은 더 이상 읽을 줄이 없을 때 false를 반환하므로, 이를 이용하여 루프를 종료.
String line = scanner.nextLine();
System.out.println("You entered : " + line);
}
scanner.close();
}
}
사용자로부터 여러 줄의 텍스트를 입력받고, 사용자가 EOF 조건인 Ctrl + D(Unix/Linux) 또는 Ctrl + Z(Windows)를 입력할 때까지 계속해서 입력을 받는다. 사용자 입력에서 EOF를 확인하는 데는 hasNextLine() 메서드가 사용되었다.
📢 Windows에서 입력 종료를 위해 Ctrl + Z가 안된다면 Ctrl + D로 시도해 보자.
BufferedReader 클래스
자바에서 Scanner 클래스 외에도 BufferedReader 클래스를 사용하여 사용자 입력을 받고 EOF를 확인할 수 있다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main{
public static void main(String[] args){
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
System.out.println("Enter lines of text (Ctrl+D or Ctrl+Z to exit) : ");
try {
String line;
while ((line = reader.readLine()) != null) {
// readLine()이 null을 반환하면 EOF 조건입니다.
System.out.println("You entered : " + line);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
BufferedReader를 사용하여 사용자로부터 한 줄씩 입력을 받고, readLine() 메서드가 null을 반환할 때까지 계속해서 입력을 받는다. 사용자 입력에서 EOF를 확인하는 데에는 readLine() 메서드가 null을 반환하는 조건을 사용한다.