Java에서 데이터를 읽는 방법은 매우 다양합니다. 특히 표준 입력(System.in)이나 파일 입력을 처리할 때 자주 사용하는 클래스인 InputStream, InputStreamReader, 그리고 BufferedReader는 각기 다른 역할과 특징을 가지고 있습니다. 이번 글에서는 이 세 클래스의 차이점과 사용 예제를 통해 언제 어떤 클래스를 사용해야 하는지 알아보겠습니다.
read(), read(byte[] b)read(), close()readLine() 메서드를 사용하여 줄 단위 데이터를 읽을 수 있습니다.readLine(), close()| 특징 | InputStream | InputStreamReader | BufferedReader |
|---|---|---|---|
| 기능 | 바이트 단위 데이터 읽기 | 바이트 -> 문자 변환 | 문자 데이터를 버퍼링하며 읽기 |
| 처리 단위 | 바이트 단위 | 문자 단위 | 문자 단위, 줄 단위(readLine) |
| 효율성 | 낮음 | 중간 | 높음 |
| 주요 메서드 | read() | read() | readLine() |
InputStream은 데이터를 바이트 단위로 처리하기 때문에, 텍스트 데이터를 읽을 때 비효율적입니다.(한글 입력시 깨짐 발생!)
import java.io.*;
public class InputStreamExample {
public static void main(String[] args) throws IOException {
InputStream is = System.in;
System.out.print("입력하세요: ");
int data = is.read(); // 한 바이트만 읽음
System.out.println("입력한 데이터 (ASCII): " + data);
System.out.println("입력한 문자: " + (char) data);
}
}
A)입력한 데이터 (ASCII): 65
입력한 문자: A
InputStreamReader를 사용하면 바이트 데이터를 문자로 변환하여 읽을 수 있습니다.(한글은 읽을 수 있지만 문자열은 읽을 수 없음)
import java.io.*;
public class InputStreamReaderExample {
public static void main(String[] args) throws IOException {
InputStreamReader isr = new InputStreamReader(System.in);
System.out.print("입력하세요: ");
int data = isr.read(); // 한 문자만 읽음
System.out.println("입력한 문자: " + (char) data);
}
}
가)입력한 문자: 가
BufferedReader는 줄 단위로 데이터를 읽을 수 있어 가장 효율적이고 사용하기 편리합니다.
import java.io.*;
public class BufferedReaderExample {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
System.out.print("입력하세요: ");
String line = br.readLine(); // 한 줄 읽기
System.out.println("입력한 내용: " + line);
}
}
안녕하세요!)입력한 내용: 안녕하세요!
| 상황 | 사용 클래스 |
|---|---|
| 바이트 데이터를 읽을 때 | InputStream |
| 문자 데이터를 읽을 때(인코딩 필요) | InputStreamReader |
| 대량의 텍스트 데이터를 처리할 때 | BufferedReader |