개발 & 데이터베이스/JAVA

[JAVA] 자바의 기초 #2 버퍼 입출력스트림 (Buffered ···) 개념 및 사용 방법

K.두부 2021. 12. 2. 01:07
반응형

버퍼 입출력스트림은 주 스트림에 버퍼를 할당해주는 기반 스트림입니다. 여기서 버퍼데이터를 전송하는 과정에서 전송하는 데이터를 일시적으로 보관하는 메모리 영역으로 쉽게 말해서 배열이라고 할 수 있습니다. 저번 포스팅에서 소개한 기본적인 입출력 스트림은 키보드에서 데이터가 입력되자마자 1byte씩 꺼내와서 저장하는 반면에 버퍼 입출력 스트림은 일정한 byte 크기를 지정해주면 그 byte 크기만큼 데이터를 버퍼로 꺼내와서 일시적으로 저장해뒀다가 한 번에 보내줍니다. 그림을 보면서 버퍼가 어떤 역할을 하고, 사용하는 이유에 대해서 알아보겠습니다.

 

그림만 본다면 버퍼를 거치고 전송되는 쪽이 더 느리다고 생각할 수 있지만 현실은 그렇지 않습니다. 간단하게 짐을 옮기는 과정을 생각해보면 이해하기가 쉽습니다. 물건 하나하나를 옮기는 것여러 물건들을 수레에 담아서 옮기는 것 중 어떤 것이 빠를까요? 당연히 후자인 수레를 이용한 방법입니다. 이처럼 버퍼에 담아서 한꺼번에 옮기는 방법이 훨씬 효율적이고 빠릅니다.

 

BufferedReader / BufferedWriter 사용 방법
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
public class Test {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
try {
String text = br.readLine();
bw.write(text);
bw.newLine(); // 개행문자 대신
bw.write(text);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
br.close(); // bufferedwirter 사용 종료 시 닫음
bw.flush(); // 남은 값 출력 후 버퍼 초기화
bw.close(); // bufferedwirter 사용 종료 시 닫음
}
}
}

BufferedReader와 BufferedWriter을 사용하면 반드시 flush() close()를 사용해야합니다. flush()는 write()에 저장된 후에 출력과 동시에 버퍼를 비워주는 역할을 합니다.

 

반응형