[Java] Buffer, BufferedReader, BufferedWriter

고병갑·2025년 1월 15일

java study

목록 보기
1/10

Buffer란?

데이터를 한 곳에서 다른 곳으로 전송하는 동안 일시적으로 그 데이터를 보관하는 메모리영역
(다른말로 Queue(큐)라고도 표현)

컴퓨터 안의 프로세스 사이에서 데이터를 이동시킬 때 사용한다

BufferedReader, BufferedWriter 란?

Buffer(버퍼)를 이용하는 함수로써
Scanner 대신 사용함

BufferedReader : Buffer를 이용한 입력

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class test1 {
	public static void main(String[] args) throws IOException{
			// BufferedReader를 사용하려면 throws IOException으로 예외처리를 해주어야함
			
			// 콘솔에서 입력받을 경우
			BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
			
			// 파일에서 입력받을 경우
			FileReader fe = new FileReader("파일이름.확장자명");
			BufferedReader br_fe = new BufferedReader(fe);
			
			// String 리턴이므로 int로 형변환
			int num = Integer.parseInt(br.readLine()); // readLine이란 입력값으로 들어온 데이터를 한 줄로 읽어서 String으로 바꾸는 메소드(무조건 한줄만 읽음!)
			
			br.close();
			br_fe.close();
			
		
	}
}

BufferedWriter : Buffer를 이용한 출력

import java.io.BufferedWriter;
import java.io.IOException;
import java.io.OutputStreamWriter;

public class test2 {
	public static void main(String[] args) throws IOException{
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
		
		String a = "고병갑";
		bw.write(a+"\n"); // write() 출력할 내용을 담음 엔터가 자동이 아니므로 줄을 띄울땐 "\n"을 넣어줘야함
		bw.flush(); // flush() write로 담은 내용을 출력 후 버퍼를 비움
		bw.close();
		
	}
}

왜 Scanner 대신 사용하는데?

Scanner 보다 빠름
Buffer를 사용하지 않은 입력은 키보드의 입력이 키를 누르는 즉시 바로 프로그램에 전달되지만

Buffer를 사용한 입력은 키보드의 입력이 있을 때 마다 한 문자씩 버퍼로 전송 → 버퍼가 가득 차거나 개행 문자가 나타나면 버퍼의 내용을 한번에 프로그램에 전송

(Scanner는 스페이스와 엔터를 경계로 입력값을 인식하지만
BufferedReader는 엔터만 경계로 인식)

※ BufferedReader는 받은 데이터를 String으로 고정하기 때문에 데이터 후처리를 해야하는 경우가 있다

close()

사용 중지를 알리는 함수
Scanner나 BufferedReader, BufferedWriter를 사용하고 나서는 close(); 라는 메소드를 통해 사용중지를 알려야함

close() 안써도 됌?


BufferedReader의 경우는 꼭 close() 메소드를 적지 않아도 Garbage Collector에 의해 BufferedReader 및 내부의 객체들이 자동으로 정리된다
즉, Reader의 경우는 close() 메소드를 적지 않아도 됨

단, BufferedWriter의 경우는 작성을 끝낸 후 적절하게 close()를 하지않으면 정상적으로 작성이 안되는 경우가 있음

결론 : 왠만하면 close() 써주자

profile
노력 naver 배신🔥

0개의 댓글