언어, 프레임워크/Java
BufferedReader / BufferedWriter
go_getter
2025. 3. 11. 11:52
입출력 성능을 향상시키기 위해 버터를 사용하는 자바의 입출력 클래스다.
Scanner는 사용자가 입력하는 값을 바로 읽고 출력하지만, Buffer는 입력값 또는 출력값을 모아놨다가 한 번에 처리하는 방식이다.
BufferedReader를 사용할 때 예외 처리가 필요하고, 버퍼를 사용해서 입출력할 때 문자열 변환 과정이 필요하다는 단점이 있지만, 한 번에 모아서 데이터를 처리하는 과정에서 입출력 속도를 향상시킬 수 있다.
BufferedReader
- 문자 기반 입력 스트림
- 입력값이 정수라면 아스키 코드 출력
- 입력값이 실수라면 NumberFormatException 발생
- => 문자열로 변환하는 과정 필요
- read() : 한 문자 단위 읽기 -> 아스키코드로 변환하여 int형으로 반환
- readLine() : 한 줄 단위 읽기
- 예외 처리 필요
- 파일을 read 할 때, 파일이 존재하지 않는 경우 IOException (FileNotFoundException) 발생
- 네트워크 스트림을 읽을 때, 서버 연결이 끊어지거나 권한 문제가 발생하여 파일을 읽지 못할 때 IOException 발생
- try-catch 블록으로 적절한 예외 처리 필요함
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 input = br.readLine(); // 한 줄 입력받기
System.out.println("입력값: " + input);
br.close(); // 리소스 해제
}
}
BufferedWriter
- 문자 기반 출력 스트림
- 문자열 외의 데이터 타입을 출력하려면, 문자열로 변환 후 출력
- 개행 문자를 포함해서 출력
- write() : 문자열이 버퍼에 쌓임
- Buffer가 가득 찼을 때는 write() 실행 시 바로 출력됨
- newLine() : 줄바꿈(\n)이 버퍼에 쌓임
- flush() : 버퍼에 쌓여있던 출력
- close()를 사용하면 자동으로 flush()를 호출
import java.io.*;
public class BufferedWriterExample {
public static void main(String[] args) throws IOException {
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); // 콘솔 출력
bw.write("Hello, BufferedWriter!");
bw.newLine(); // 개행 (== \n)
bw.write("Java I/O 성능 향상!");
bw.flush(); // 버퍼 비우기 (출력)
bw.close(); // 리소스 해제
}
}