BufferedReader
BufferedReader란 ?
- 자바에서 입력스트림으로부터 문자를 효율적으로 읽어들이기 위한 클래스
- 대량의 문자데이터를 읽을 떄 성능을 개선하기 위해 사용됩니다.
용어설명
- Buffer : 데이터를 전송할떄, 일시적으로 데이터를 보관하는 임시메모리 영역, 입출력 속도 향상을 위해 사용됨
- BufferedReader: 버퍼를 이용한 입력
- BufferedWriter: 버퍼를 이용한 출력
Scanner vs BufferedReader
Scanner
- scanner란 데이터 유형과 문자열을 분석할 수 있는 텍스트 스캐너입니다.
- 스페이스와 엔터로 구분하고, 입력받는 즉시 자료형이 설정되므로 별도의 형변환이 필요없습니다.
그러므로, 문자열에서 다양한 데이터타입으로 구분이 필요한 경우나, 문자열을 다양하게 쪼개야 할 경우에 사용됩니다.
System.in - 바이트 스트림
- System.in은 자바에서 표준 입력 스트림을 나타내며, 주로 키보드 입력을 처리합니다.
- 즉, 사용자가 입력하는 데이터를 바이트 단위로 읽어들입니다. 바이트 스트림은 입력된 데이터를 1바이트씩 읽고, 이는 기본적으로 숫자로 표현됩니다(0부터 255까지).
BufferedReader
- 단순 입력의 양이 많을때 사용하면 빠르게 처리할 수 있는 입력클래스입니다.
- BufferedReader는 InputStreamReader이랑 같이 사용합니다.
- InputStreamReader는 System.in으로부터 받아온 바이트스트림을 문자스트림으로 변환합니다.
- BufferedReader는 변환된 문자스트림을 내부적으로 버퍼를 사용하여, 데이터를 한번에 대량으로 읽어들입니다.
code
import java.util.*;
import java.io.*;
public class BR {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String str = br.readLine();
System.out.println(str);
int n = Integer.parseInt(str);
StringTokenizer st = new StringTokenizer(br.readLine());
String str1 = st.nextToken();
int m = Integer.parseInt(st.nextToken());
String[] strs = br.readLine().split(" ");
}
}
사용법
import
- BufferedReader를 사용하려면, InputStreamReader과 예외처리를 사용해야 하므로, 다음의 세가지를 import해야합니다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
혹은, * 를 이용해서 한꺼번에 import처리 해줘도 됩니다.
IOException
- BufferedReader에서 readLine() 을 사용할땐, 예외처리를 해주어야 합니다. 그 이유는, 키보드 입력이 null일때 자원이 없는데 강제로 read시키면 프로그램 장애를 유발하기 때문에, 미리 예외처리를 해서 막아야 하는 것 입니다.
- 예외처리를 위해 main함수에 throws IOException 를 추가해주면 됩니다.
객체 생성
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));:
- BufferedReader 객체 br을 생성하여, System.in으로부터 입력을 받을 준비를 합니다. InputStreamReader를 통해 바이트 스트림을 문자 스트림으로 변환한 후 받은 문자스트림을 버퍼링합니다.
readLine()
- String str = br.readLine();
- br.readLine()를 호출하여 사용자로부터 한줄의 입력을 문자열로 읽습니다. 이 변수는 str변수에 저장됩니다.
받아온 문자열을 정수로 변환할 수도 있고, 문자열을 자를 수도 있습니다.
방법은 아래와 같습니다.
문자 입력받기
문자를 입력받은 경우 보통 두 가지 경우가 발생합니다.
- 입력받은 문자를 숫자로 변환할 경우
- 문자를 숫자로 변환할 경우에는 Integer.parseInt()로 변환해주면 됩니다.
int n = Integer.parseInt(str);
- 입력받은 문자를 특정 문자 기준으로 자를 경우
- StringTokenizer
StringTokenizer 생성자에 입력받을 문자를 넣은 후, nextToken() 함수로 하나 씩 가져와 사용할 수 있습니다.
StringTokenizer st = new StringTokenizer(br.readLine());
String str1 = st.nextToken();
int m = Integer.parseInt(st.nextToken())
- String.split()
반환을 String [] 배열로 받아주어야 합니다. split() 함수의 인자로 자를 문자를 입력하면 된다.
String[] strs = br.readLine().split(" ");