반응형

버퍼 입출력스트림은 주 스트림에 버퍼를 할당해주는 기반 스트림입니다. 여기서 버퍼는 데이터를 전송하는 과정에서 전송하는 데이터를 일시적으로 보관하는 메모리 영역으로 쉽게 말해서 배열이라고 할 수 있습니다. 저번 포스팅에서 소개한 기본적인 입출력 스트림은 키보드에서 데이터가 입력되자마자 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()에 저장된 후에 출력과 동시에 버퍼를 비워주는 역할을 합니다.
반응형
'개발 & 데이터베이스 > JAVA' 카테고리의 다른 글
[JAVA] 배열 생성과 선언 사용하는 방법 (0) | 2022.02.28 |
---|---|
[JAVA] apache poi로 엑셀 생성하기 #3 이미지 생성하기 (0) | 2021.12.14 |
[JAVA] apache poi로 엑셀 생성하기 #2 셀 병합하기 (0) | 2021.12.14 |
[JAVA] apache poi로 엑셀 생성하는 방법 #1 표 만들기 (0) | 2021.12.12 |
[JAVA] 자바의 기초 #1 입출력 IO (System.in, System.out) (0) | 2021.12.01 |