[Java] 버퍼 입출력
2021. 12. 17. 16:58ㆍLanguage`/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() 메소드 호출