study/java

자바[JAVA] BufferedReader

박허디 2024. 6. 2. 16:30

키보드로 입력받기 위해서는 앞서 말한 Scanner도 있지만

BufferedReader도 있다 

 

2024.05.31 - [study/java] - 자바[JAVA] 스캐너(Scanner)

 

자바[JAVA] 스캐너(Scanner)

키보드로 입력받기 위해서는 Scanner라는 클래스를 이용할 수 있다. 자바에서 java.util 패키지 안에 Scanner 클래스가 있어서사용하고 싶을땐 import 해주면 된다. import java.util.Scanner; // Scanner만 따로

herniateddisc-park.tistory.com

 

 

BufferedReader를 사용하기 위해선

이런 식으로 import 해주면 된다.

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;

 

BufferedReader 객체는 이런 식으로 생성할 수 있다.

// 아래와 같이

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

 

 

InputStream 은 바이트 단위로 데이터를 처리한다. 또한 System.in의 타입도 InputStream이다.

InputStreamReader의 역할은 문자(character) 단위로 데이터를 처리할 수 있도록 돕는다. InputStream의 데이터를 문자로 변환하는 중개 역할을 한다

 

BufferedReader 특징은 두 가지가 있는데

1. 버퍼가 있는 스트림

2. 별다른 정규식을 검사하지 않음.

 

위와 같이 두 개의 특징 덕분에 입력 과정에서 Scanner에 비해 성능이 우수할 수밖에 없다.

 

BufferedReader의 경우 Scanner와 다르게 문자열 그대로 읽어 들이기 때문에 별다른 정규식을 검사하지 않기 때문에

Scanner처럼 문자열마다 다르게 출력문자를 입력할 필요 없이 

readLine() 하나로 통일 시킬 수 있다

 

 

이용 예시는 아래와 같다.

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;

public class Main{
        
    public static void main(String[] args) throws IOException {
    
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        
        String text = br.readLine();
        
        System.out.println(text);
    
    }
}

 

추가로

readLine()으로 읽어온 건 String을 반환하니 만약 다른 데이터타입을 받고 싶으면 변환해줘야 한다.

또한 readLine()에서는 공백도 문자로 인식하기 때문에 보통 문자열을 분리해주면서 읽어준다.

문자열을 분리할땐

  1. StringTokenizer 클래스를 이용하여 분리해 주는 방법
  2. split()을 이용하는 방법

 이렇게 두 가지 방법이 있는데 StringTokenizer 가 성능면에서 좋다.

StringTokenizer 사용 방법은 아래와 같다.

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import java.util.StringTokenizer; // 추가
 
public class Main {
	public static void main(String[] args) throws IOException {
		
    
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        
        String text = br.readLine(); // 3 4 가 입력 됐다고 생각하면 
        StringTokenizer st = new StringTokenizer(text," "); // 공백을 기준으로 토큰화 시키기
        
        int a = Integer.parseInt(st.nextToken()); // 첫번재 토큰 3
        int b = Integer.parseInt(st.nextToken()); // 공백 제거 후 토큰 4
        
        System.out.println(a); // = 3
        System.out.println(b); // = 4
	}
}

 

'study > java' 카테고리의 다른 글

자바[JAVA] 조건문  (0) 2024.06.14
자바[JAVA] 삼항연산자  (0) 2024.06.10
자바[JAVA] charAt  (2) 2024.06.03
자바[JAVA] toCharArray()  (1) 2024.06.03
자바[JAVA] 스캐너(Scanner)  (0) 2024.05.31