[Java] BufferedReader

현굥·2024년 8월 9일

Java

목록 보기
3/8

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변수에 저장됩니다.

받아온 문자열을 정수로 변환할 수도 있고, 문자열을 자를 수도 있습니다.
방법은 아래와 같습니다.

문자 입력받기

문자를 입력받은 경우 보통 두 가지 경우가 발생합니다.

  1. 입력받은 문자를 숫자로 변환할 경우
  • 문자를 숫자로 변환할 경우에는 Integer.parseInt()로 변환해주면 됩니다.
		int n = Integer.parseInt(str);
	
  1. 입력받은 문자를 특정 문자 기준으로 자를 경우
  • 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(" ");

0개의 댓글