[Java] [입출력] BufferedReader 와 BufferWriter
Updated:
용어 정리
- Buffer(버퍼) : 데이터를 A에서 B로 전송하는 중간에 일시적으로 데이터를 보관하는 임시 메모리 영역. 입출력의 효율을 높여준다
- Buffer flush(버퍼 플러시) : 버퍼에 남아 있는 데이터를 출력시킨다. (버퍼비움)
- BufferedReader : 버퍼를 이용한 입력
- BufferedWriter : 버퍼를 이용한 출력
Buffer 함수
- 버퍼를 이용하기 때문에 입출력의 효율이 Scanner/System.out.print()보다 좋아진다
- 한번 거쳐서 가기 때문에 느릴 것 같지만 빠른 이유 : 하드디스크는 원래 속도가 아주 느리므로 키보드가 눌릴 때마다 눌린 데이터를 즉시 이동시키기보다 메모리 버퍼에 데이터를 묶었다가 이동시키는게 효율적이다.
- 많은 데이터를 입력받아야 할 상황에서 주로 이용한다.
BufferedReader
- Scanner와 비교
- Scanner는 띄어쓰기와 엔터를 경계로 입력값을 인식하기 때문에 가공이 필요없어서 편하지만 BufferedReader는 엔터만 경계로 인식하고 받은 데이터가 String으로 고정되므로 데이터를 가공해야하는 경우가 많다.
- 사용
import java.io.*; ~ BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); // 콘솔에서 입력받는 경우 FileReader fr = new FileReader("파일명.java"); BufferedReader br_f = new BufferedReader(fr); // 파일에서 입력받는 경우 int num - Integer.parseInt(br.readLine()); // 기본값 : String br.close(); //입출력이 끝난 후 종료 String line = ""; for(int i =1; (line = br_f.readLine()) !=null; i++){ System.out.println(line); }
-
함수
반환 함수 설명 void Close() 입력스트림을 닫고 사용하던 자원을 푼다 int read() 한 글자만 읽어 정수형으로 반환해준다. ex) ‘3’입력 → ‘3’의 정수형 51 반환 boolean ready() 입력스트림을 사용할 준비가 되었는지 확인. 1 = 준비완료 String readLine() 한 줄을 읽어서 String으로 반환
BufferedWriter
- System.out.print()와 비교
- System.out.print()는 문자열출력과 개행을 동시에 해주지만 BufferedWriter는 개행을 하려면 “\n”을 넣거나 newLine함수를 이용해야한다.
- 사용
import java.io.*; ~ BufferedWriter bw = new BufferedWriter(new FileWriter("파일명.java")); bw.write("hello"); // bw.newLine(); // 개행(엔터) bw.write("good\n"); // r개행과 함께 출력 bw.flush(); //남은 데이터 모두 출력 bw.close(); 스트림 닫기
-
함수
반환 함수 사용 void Close() 출력스트림을 닫는다. 닫기 전에 flushing하기 void flush() 스트림을 비운다. 버퍼에 모인 데이터를 출력한다. void newLine() 개행역할 void write(int c), write(String s, int offset, int length), write(Char[] cbuf, int offset, int length) 글자를 버퍼에 저장, 버퍼 offset위치부터 length크기만큼 글자 저장, 각각으로 저장된 글&숫자는 개행이 없어서 한줄로 이어지므로 필요하다면 각 저장시 “\n”을 추가해줘야한다.
참고
- 자바의 정석
Leave a comment