[Java] 빠른 입출력 BufferedReader, BufferedWriter (feat.StringTokenizer)

monya·2023년 1월 4일
0

java

목록 보기
1/1
post-thumbnail

BufferedReader, BufferedWriter는 Buffer에 있는 I/O(Input/Output) 클래스

Buffer란?

데이터를 잠시 저장해두는 임시 저장 공간

Buffer사용 유무에 따른 입력

Buffer 사용 시

  1. 키보드의 입력이 있을 때마다 버퍼에 저장함
  2. 버퍼가 가득 차거나 특정 입력이 있을 경우 버퍼의 내용을 한 번에 전송

Buffer 미 사용 시 (Scanner)

  1. 키보드의 입력이 있을 때마다 즉시 전송

전송이 느리기 때문에 한 번에 모아서 하는 버퍼가 월등히 빠름
Scanner는 사용하기 편한 대신 느리지만, BufferedReader는 Scanner에 비해 사용하기 불편하지만 빠름

 

BufferedReader

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));	// 선언
String str = br.readLine();	//String
int num = Integer.parseInt(br.readLine()); //int

readLine()은 예외처리를 해줘야 한다.
대부분 throws IOExcepion을 사용하며, try/catch를 사용해도 무방함

 

데이터 가공

1. String.split()

String array[] = str.split("");	//공백마다 데이터를 끊어서 배열에 넣음

String.split() 함수를 사용한 방법으로 공백마다 데이터를 끊어서 배열에 삽입함

2. StringTokenizer

StringTokenizer st = new StringTokenizer(br.readLine()); //StringTokenizer인자값에 입력 문자열 넣음
int a = Integer.parseInt(st.nextToken()); //첫번째 호출
int b = Integer.parseInt(st.nextToken()); //두번째 호출

StringTokenizer에 nextToken() 함수를 이용해 공백단위로 구분하여 호출

for문 작성시 StringTokenizer

// 1.
StringTokenizer st = new StringTokenizer(br.readLine());
for(int i = 0; i < num; i++){
	int a = Integer.parseInt(st.nextToken());
	int b = Integer.parseInt(st.nextToken());
}

// 2.
StringTokenizer st = null;
for(int i = 0; i < num; i++){
	st = new StringTokenizer(br.readLine());
	int a = Integer.parseInt(st.nextToken());
	int b = Integer.parseInt(st.nextToken());
}

for문 작성 시 1번으로 작성해도 잘 돌아가는 경우가 있고, 2번처럼 작성해야 에러 없이 돌아가는 경우가 있는데, 아직 이 둘의 차이점을 잘 모르겠다.
이유를 알게 되면 이후에 추가하도록 하겠다.

BufferedWriter

BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); //선언

String str = br.readLine(); //출력할 값 입력받기

bw.write(str); //출력
bw.newLine(); //줄바꿈
bw.flush(); //남아있는 데이터를 모두 출력
bw.close(); //스트림을 닫음

숫자값인 경우

int num = br.readLine(); //출력할 값 입력받기

bw.write(num + " "); //출력할 값이 숫자인 경우
bw.write(num + "\n"); //한칸 내려 쓰고 싶을 경우

출력할 값이 숫자인 경우 뒤에 공백 또는 문자 추가하여 문자열로 바꾸어 출력
숫자 + 문자 = 문자

실습

[백준]빠른 A+B

관련 포스팅 보러가기

[백준] 15552 빠른 A+B

profile
공부 끄적임

0개의 댓글