Java : Scanner와 BufferedReader

Scanner와 BufferedReader/Writer

Scanner

  • 공란과 줄바꿈을 모두 입력값의 경계로 인식하기 때문에 쉽게 데이터를 입력받을 수 있도록 해줍니다.
  • 데이터 타입이 입력받는 시점에서 결정되므로 별도의 Casting이 필요하지 않습니다.
import java.util.Scanner;

public class parc {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        
       	int a = sc.nextInt();
        float b = sc.nextFloat();
        String str = sc.next();
        String strWithSpace = sc.nextLine();        //공백을 포함
 		// 다양한 데이터 타입으로 입력이 가능합니다.
        
        sc.close();
 
        System.out.println(a);
        System.out.println(b);
        System.out.println(str);
        System.out.println(strWithSpace);
    }
}

BufferedReader/Writer

  • InputStreamReader는 문자열을 Character단위(한 글자 단위)로 읽어 들이는데, 긴 문자열을 읽을 때 불편하고 비효율적입니다. 이 점을 보완한 것이 BufferedReader 입니다.
  • 사용자가 요청할 때 마다 데이터를 읽어 오는 것이 아니라 일정한 크기의 데이터를 한번에 읽어와 버퍼에 보관 후, 사용자의 요청이 있을 때 버퍼에서 데이터를 읽어오는 방식으로 동작합니다.
    • 속도가 향상되고 시간 부하가 적습니다.
  • 라인단위로 입력 받기 때문에 공백의 경우에도 String으로 인식하여 받아들입니다.
  • 입력,출력받은 데이터 타입이 String 타입이므로 다른 타입의 데이터라면 형변환이 필요합니다.
    • String.format을 이용해 출력할 때 다양한 방식으로 간편하게 출력할 수 있습니다!
  • try / catch(예외처리)를 해 주어야 합니다.
import java.io.*;
 
public class prac {
    public static void main(String[] args){
        InputStreamReader isr = new InputStreamReader(System.in);
        BufferedReader br = new BufferedReader(isr);
 
        OutputStreamWriter osw = new OutputStreamWriter(System.out);
        BufferedWriter bw = new BufferedWriter(osw);
 
        try {
            String str = br.readLine();     //입력
 
            bw.write(str);                  //출력
            bw.flush();						// 버퍼를 비워줍니다.
            bw.close();
 
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

Scanner vs BufferedReader

  BufferedReader Scanner
Buffer Size 8192 1024
Syncronized O X
Parsing 단순히 읽어 들임 문자열 파싱 가능
Exception IOException 던짐 IOException 숨김
  • Scanner는 문자열 파싱 기능이 제공되는 반면 BufferedReader는 단순히 읽어 들이기 때문에 상대적으로 BufferedReader가 더 빠릅니다.
  • Scanner는 정규표현식(Regex)을 많이 사용하여 알아서 Tokenizing과 Parsing을 해주기 때문에 패턴을 분석하는데 있어서 시간을 많이 잡아먹습니다.
    • 정규표현식을 이용하면 패턴을 이용해 문자열을 좀 더 세밀히 분석할 수 있습니다.

출처 : https://carpediem0212.tistory.com/11

https://ohmycode9328.tistory.com/10

댓글남기기