-> 블로그 이전

[Java] 버퍼 입출력

2021. 12. 17. 16:58Language`/Java

버퍼

- 데이터를 잠시 저장하기 위한 메모리

- 시스템의 속도나 효율 상승


입력 버퍼 스트림 BufferedReader / BufferedInputStream

  • BufferedReader(Reader in) : in을 연결하는 디폴트 크기(16384byte)의 문자 입력 버퍼 스트림 생성
  • BufferedReader(Reader in, int size) : in을 연결하는 size 크기의 문자 입력 버퍼 스트림 생성
  • BufferedInputStream(InputStream in) : in을 연결하는 디폴트 크기(2048byte)의 입력 버퍼 스트림 객체 생성
  • BufferedInputStream(InputStream in, int size) : in을 연결하는 size 크기의 입력 버퍼 스트림 객체 생성

 

BufferedReader 메소드

함수 설명
void close() 입력 스트림을 닫고, 사용하던 자원을 해제
void mark(int readAheadLimit) 스트림의 현재 위치를 마킹
int read() 한 글자만 읽어서 정수형으로 반환
String readLine() 한 줄을 읽음 (입력할 때 사용)
boolean ready() 입력 스트림이 사용할 준비가 되었는지 확인 (1이 준비완료)

 

BufferedReader 사용법

- Scanner와 비슷

- Scanner : 버퍼의 크기가 작기 때문에 수행시간이 오래 걸린다

- Scanner의 단점 극복 : BufferedReader

  • BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
  • BufferedReader : 개행문자만 경계로 인식, 입력받은 데이터는 String으로 고정, 동기화 되기 때문에 안전
    • 다른타입으로 입력받고자하면 Integer.parseInt(), Double.parseDouble(),.. 등 형변환을 해줘야 한다
  • readLine()의 예외처리는 throws IOException을 통해서 처리
BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); // 선언
String text = br.readLine(); // text 한 줄 입력
int i = Integer.parseInt(br.readLine()); // 입력 받은 대상을 int로 형변환
String str = String.valueOf(i); // 입력받은 i(int)를 다시 String으로 변환
char ch1 = text.charAt(0); // text길이가 1인 경우, string->char로 형변환
char[] ch2 = text.toCharArray(); // text길이가 2이상인 경우, String->char로 형 변환

출력 버퍼 스트림 BufferedWriter / BufferedOutputStream

  • BufferedWriter(Writer out) : out을 연결하는 디폴트 크기(16384byte)의 문자 출력 버퍼 스트림 생성
  • BufferedWriter(Writer out, int size) : out을 연결하는 size 크기의 문자 출력 버퍼 스트림 생성
  • BufferedOutputStream(OutputStream out) : out을 연결하는 디폴트 크기(512byte)의 출력 버퍼 스트림 객체 생성
  • BufferedOutputStream(OutputStream out, int size) : out을 연결하는 size 크기의 출력 버퍼 스트림 객체 생성

 

BufferedWriter 메소드

함수 설명
void close() 스트림 닫기, 닫기전 flush()를 통해서 버퍼 비우기
void flush() 스트림 버퍼 비우기
void newLine() 개행 문자 역할
bw.write(\n")을 통해서도 가능
void write(int c) 한 글자 출력
void write(String s, int offset, int len) 문자열의 offset부터 len만큼 출력
void write(char[] buf, int offset, int len) 배열의 offset부터 len만큼 출력

 

BufferedWriter 사용법

- System.out.print와 비슷

- System.out.print : 버퍼의 크기가 작기 때문에 수행시간이 오래 걸린다

- System.out.print의 단점 극복 : BufferedWriter

  • BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); 
  • BufferedWriter : System.out.println()처럼 출력, 개행을 동시에 해주지 않는다
    • 개행을 하려면 newLine() or bw.write("\n")을 통해서 개행 해야 한다
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); // 선언
String str = "abcde";
bw.write(str); // 문자열 str 출력
bw.newLine(); // 개행
bw.write("\n"); // 개행
bw.flush(); // 버퍼 전부 출력
bw.close();

flush()

  • 버퍼 스트림은 버퍼가 꽉 찼을 때만 출력되는 특징 보유
  • 버퍼에 있는 데이터를 강제로 출력하려면 flush() 메소드 호출