1. 바이트 스트림 & 문자 스트림
바이트 스트림
- Byte Stream은 데이터를 Byte 단위로 처리합니다.
- 모든 종류의 파일 (텍스트, 이미지, 비디오 등) 데이터를 처리합니다.
- InputStream, OutputStream 클래스는 모든 바이트 기반 입출력 스트림의 최상위 추상 클래스입니다.
문자 스트림
- Character Stream은 데이터를 Character 단위로 처리합니다.
- 주로 텍스트 파일 데이터를 처리합니다.
- Reader, Writer 클래스는 모든 문자 기반 입출력 스트림의 최상위 추상 클래스입니다.
2. InputStreamReader & OutputStreamWriter
- InputStreamReader는 바이트 입력 스트림을 문자 입력 스트림으로 변환합니다.
- OutputStreamWriter는 바이트 출력 스트림을 문자 출력 스트림으로 변환합니다.
3. BufferedReader & BufferedWriter
- BufferedReader와 BufferedWriter는 문자 입출력 스트림에 버퍼링 기능을 추가한 클래스입니다.
- 내부적으로 버퍼를 사용해 스트림에서 데이터를 큰 덩어리로 읽거나 출력합니다. 각 문자를 개별적으로 처리하는 것 보다 입출력(I/O) 작업 횟수를 줄여 성능이 향상됩니다.
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
- System.in과 System.out은 바이트 스트림입니다. (더 정확히는 System.out은 OutputStream을 확장한 PrintStream입니다.)
- InputStreamReader와 OutputStreamWriter는 문자 스트림으로, 바이트 스트림을 문자 스트림으로 변환합니다.
- BufferedReader와 BufferedWriter는 문자 스트림으로, 문자 스트림에 버퍼링 기능을 추가했습니다.
4. Scanner vs. BufferedReader
Buffer 사용 여부
- Scanner는 버퍼를 사용하지 않고 직접 입력 스트림에서 데이터를 읽어옵니다. 이는 읽기 연산 마다 I/O 작업 횟수가 늘어나 성능에 부정적인 영향을 미칠 수 있습니다.
- BufferedReader는 버퍼를 사용해 입력 스트림에서 데이터를 한 번에 읽어옵니다. 읽기 연산 마다 버퍼에서 데이터를 읽어오기 때문에 I/O 작업 횟수가 줄어들어 성능이 향상됩니다.
데이터 처리 방식
- Scanner는 입력 데이터를 파싱해 원하는 타입으로 변환할 수 있는 유연성을 제공합니다.
- BufferedReader는 데이터를 텍스트로 읽어옵니다.
결론
입출력 성능이 중요할 경우 BufferedReader를 사용하는 것이 좋습니다. 반면 데이터 형식이 유연하게 처리되어야 할 경우 Scanner를 사용하는 것이 좋습니다.
'개발 > Java' 카테고리의 다른 글
[Java] 익명 클래스, 익명 객체란? (0) | 2024.06.18 |
---|---|
[Java] 자바 배열 원소를 이어 붙여서 출력하는 4가지 방법 (0) | 2024.05.31 |
[Java] Map을 순회하는 3가지 방법 (0) | 2024.05.28 |
[Java] 자바 Optional 올바른 사용법 (0) | 2024.05.23 |
[Java] 자바 String 문자열, char 문자를 int 정수로 변환하기 (0) | 2024.05.21 |