Java에서 입력을 받을 때 Scanner 클래스를 통해 입력을 받았습니다. Scanner는 BufferedReader가 사용하기 불편하여 등장했으나 Scanner의 경우 내부적으로 정규 표현식이 많이 적용되어있어 타임어택 관련 알고리즘에 관하여 성능이 희생당하는 부분이 있습니다.
BufferedReader / Bufferedwriter는 이름처럼 버퍼를 이용해서 읽고 쓰는 함수입니다.
BufferedReader는 개행문자만 경계로 인식하고 입력받은 데이터는 String으로 고정됩니다.
기본 사용법은 다음과 같습니다.
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String s = br.readLine();
int i = Integer.parseInt(br.readLine());
위에서 언급한 것처럼 반환값이 String으로 고정되어 있기 때문에 다른 타입을 받으려면 반드시 형변환을 해야합니다. 그리고 예외처리를 반드시 필요로 하는데 사용자의 편의에 맞게 try/catch문 혹은 throw IOException을 통해 할 수 있습니다.
BufferedReader를 통해 읽어온 데이터는 개행문자 단위로만 나누어지기 때문에 이를 공백 단위로 데이터를 가공하려면 따로 작업을 해야합니다. 이 때 사용하는 것은 StringTokenizer, String.split() 함수를 사용할 수 있습니다.
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int N = Integer.parseInt(st.nextToken());
int M = Integer.parseInt(st.nextToken());
String arr[] = s.split(" ");
StringTokenizer의 nextToken() 함수를 쓰면 readLine()을 통해 입력 받은 값을 공백 단위로 구분하여 순서대로 호출할 수 있습니다. 반면 String.split() 함수를 사용하면 배열에 공백 단위로 끊어 데이터를 저장하여 사용할 수 있습니다.
Modifier and Type | Method and Description |
void | close() : 입력 스트림을 닫고 사용하던 자원을 해제합니다. |
void | mark(int, readAheadLimit) : 스트림의 현재 위치를 마킹합니다. |
int | read() : 한 글자만 읽어 정수형으로 반환합니다. |
String | readLine() : 한 줄을 읽습니다. |
boolean | ready() : 입력 스트림이 사용할 준비가 되었는지 확인합니다. |
Bufferedwriter의 기본 사용법은 다음과 같습니다.
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
String str = "abcdef";
bw.write(str);
bw.newLine();
bw.flush();
bw.close();
- String str : 출력할 문자열을 입력합니다.
- bw.write() : 문자열을 출력합니다.
- bw.newLine() : 줄을 개행합니다.
- bw.flush() : 남아있는 데이터를 모두 출력합니다.
- bw.close() : 출력스트림을 닫습니다.
Bufferedwriter는 System.out.println() 처럼 출력과 개행을 동시에 해주는 것이 아니기 때문에 개행을 위해서는 따로 newLine()을 사용해야 합니다. 그리고 Bufferedwriter의 경우 버퍼를 잡아 놓았기 때문에 사용한 후 반드시 flush() / close()를 해야합니다.
Modifier and Type | Method and Description |
void | close() : 출력 스트림을 닫습니다. |
void | flush() : 스트림을 비웁니다. |
void | newLine() : 개행합니다. |
void | write(char[] buf, int offset, int length) : 버퍼 offset 위치부터 length 크기 만큼 출력합니다. |
void | write(int c) : 한 글자를 출력합니다 |
void | write(String s, int offset, int length) : 문자열에서 offset에서부터 일정 길이만큼 출력합니다. |
'Java' 카테고리의 다른 글
[Java] AtomicLong (0) | 2023.01.27 |
---|---|
[Java] Record Class (0) | 2023.01.27 |
[Java] 상속(Inheritance) (0) | 2023.01.24 |
[Java] Arrays.sort (0) | 2023.01.12 |
[Java] indexOf/lastIndexOF (0) | 2023.01.12 |