본문 바로가기
java

[Java] 코테 준비를 위한 입출력

by 장인이 2023. 5. 29.

1. 개요

 자바 사용 시 일반적으로는 System.out.println(""), Scanner 를 사용하여 입출력을 처리한다. 하지만 코딩 테스트 문제를 풀기 위해서, 이 두 방식은 시간 소모가 심하다는 단점이 있다. 구글링하면 많이 나오는 정보들이지만, 한번 정리하기 위해 어떤 클래스를 사용해야하는지 정리해볼 것이다.

 

 

2. 자바 입력 클래스

BufferedReader를 사용하는 것이 Scanner를 사용하는 것보다 빠르다.

BufferedReader

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String input = br.readLine();

 

하지만 BufferedReader는 정수를 입력받는 함수를 제공해주지 않기 때문에, 필요한 경우 직접 변환해서 사용해야 한다.

int a = Integer.parseInt(br.readLine());

 

StringTokenizer

BufferedReader br = new BufferedReader(new InputStreamReader(System.in());
StringTokenizer st = new StringTokenizer(br.readLine());

int a = Integer.parseInt(st.nextToken());
int b = Integer.parseInt(st.nextToken());
int c = Integer.parseInt(st.nextToken());

 문제를 풀다 보면, 숫자 혹은 문자들의 입력 방식이 다음과 같을 때가 있다.

 이런 경우에 StringTokenizer를 사용하면, 빠르게 처리할 수 있다. StringTokenizer는 공백으로 값이 구분되는 경우에 사용하자.

 

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String inp = br.readLine().split(" ");

 위와 같이 처리할 수도 있다. (속도가 비교적 느림)

 

 

3. 자바 출력 클래스

 BufferedWriter를 사용하는 것이 System.out.println("")에 비해 빠르다. 적은 양의 출력에서는 괜찮지만, 출력량이 많아질 경우 고려해보자.

 

BufferedWriter

BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
bw.write("hello bf!");
bw.newLine();
bw.flush();
bw.close();

- bw.write() : 괄호안의 값을 출력한다.

이때, 파라미터로 char값 혹은 String을 받기 때문에 숫자를 출력하고 싶으면, String.valueOf()로 감싸야 한다.

- bw.newLine() : 줄바꿈

- bw.flush() : 버퍼에 남아있는 데이터를 비운 후, 해당 데이터를 출력

- bw.close() : 버퍼에 남아있는 데이터를 비운 후, 해당 데이터를 출력한 후 스트림이 닫힘

  해당 스트림을 다시 이용하여 파일에 쓰는 것이 불가능해짐

 

 즉, bw.write() 함수를 통해 버퍼에 값을 저장하고, 출력하고 싶은 경우에 flush() 혹은 close()를 사용해주자. 출력하고 종료할거라면 close()를, 더 출력할 일이 있다면 flush()를 활용하자.

 

BufferedWriter를 사용한 후에는, 반드시 flush() 혹은 close() 둘 중 하나를 작성해주어야 한다. (버퍼를 비우기 위해)

 

 

참고 사이트

https://velog.io/@kimmjieun/Java-%EC%BD%94%EB%94%A9%ED%85%8C%EC%8A%A4%ED%8A%B8%EB%A5%BC-%EC%9C%84%ED%95%9C-%EC%9E%85%EC%B6%9C%EB%A0%A5-%ED%8C%81

 

'java' 카테고리의 다른 글

[Java] Stream 이란, Stream의 필요성 - 1  (0) 2024.05.02
[Java] String.repeat()  (0) 2023.05.31
[Java] StringBuilder  (0) 2023.05.29
자바(Java) - static import  (0) 2022.12.17

댓글