자바로 알고리즘 공부를 시작하면서 Scanner보다 빠른 입출력이 가능한
BufferedReader와 BufferedWriter을 공부하였고 정리해보려고 한다.
파이썬도 기존의 input() 대신 빠른 입력을 위해 sys.stdin.readline()을 사용했었는데
자바도 비슷한 원리인 것 같다.
BufferedReader와 BufferedWriter는 버퍼를 사용하여 읽기와 쓰기를 하는 함수로
버퍼를 사용하지 않는 입력은 키보드의 키를 누름과 동시에 바로 프로그램에 입력이 전달되지만
버퍼를 사용하는 입력은 버퍼로 전송한다.
버퍼가 다 차거나 개행 문자 등이 나타날 경우 버퍼의 내용을 한번에 프로그램에 전달한다.
Scanner는 사용하기 쉽지만 버퍼사이즈가 1024char로 매우 작기 때문에 입력의 크기가 클 경우
BufferedReader를 사용하는 것이 효율적이다.
BufferedReader
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
String s = bf.readLine();
int num = Integer.parseInt(bf.readLine());
BufferedReader는 항상 String으로 입력을 받으므로 int형 사용시 변환해주어야한다.
또한 readLine()을 사용하기 위해 throws IOException을 사용하여 예외처리를 해주어야한다.
코딩테스트 문제를 풀다보면 공백으로 문자를 입력받아야 하는 경우가 종종 있는데 그럴 경우
StringTokenizer를 사용하면 편리하다.
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(bf.readLine());
// 방법 1 - nextToken() 여러번 사용 (StringTokenizer 사용 O)
int x = Integer.parseInt(st.nextToken())
int y = Integer.parseInt(st.nextToken())
// 방법 2 - split()으로 공백을 나누어 배열로 사용 (StringTokenizer 사용 x)
String xy = bf.readLine();
String arr[] = xy.split(" ");
StringTokenizer을 사용하지 않는다면 위와 같이 공백을 기준으로 데이터를 나누어 배열에 담아 활용한다.
BufferedWriter
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
String x = bf.readLine();
bw.write(); //출력
bw.flush(); //남아있는 데이터 모두 출력
bw.close(); //스트림 종료
** System.out.println()처럼 개행을 하고 싶다면 \n을 사용하여 출력해야 한다.
'컴퓨터 > JAVA' 카테고리의 다른 글
[java] int와 Integer? (0) | 2023.09.04 |
---|---|
[java] StringBuilder (0) | 2023.05.26 |
[java] HashSet() (0) | 2023.05.22 |
[java] toCharArray() (0) | 2023.05.18 |
[java] [Error] no suitable method found for sort(int[],java.util.Comparator<java.lang.Object>) (0) | 2023.05.05 |