[Java] Scanner vs BufferedReader
by Choi HyeSun
출처 LINK
java.util.Scanner
- 
    
기본형과 문자열(String)을 분석할 수 있는 단순한 텍스트 스캐너 클래스
 - 
    
다른 타입들(기본형인지 문자형인지)을 읽기 위해서 정규표현식을 내부적으로 사용함
 - 
    
다음 메소드 제공 : nextLine(), nextInt(), nextFloat(), nextByte(), nextShort(), nextDouble(), nextLong(), next()
 - 
    
nextLine() 메소드를 nextLine()을 제외한 nextXXX() 메소드 후 호출시 Scanner 클래스에서 nextLine()이 콘솔에서 값을 읽지 않고 커서가 콘솔에 들어가지 않게 됨
- 
        
nextXXX()와 nextLine() 사이에 nextLine() 메서드를 한 번 더 호출하면 nextLine()이 줄 바꿈 문자를 사용하기 때문에 문제가 발생하지 않음
 - 
        
nextXXX() 메소드는 줄 바꿈 문자를 무시하고 nextLine()은 첫 번째 줄 바꿈 문자까지 읽음
 
 - 
        
 - 
    
사용법
 
// import는 여기에다가
import java.util.Scanner;
public class Sunny {
    public static void main(String[] args) {
        // Scanner Object sc 생성
        Scanner sc = new Scanner(System.in);
        // Scanner sc의 nextInt() 사용
        int a = sc.nextInt();
        // nextXXX() 뒤의 nextLine()사용을 위해 넣어줌
        sc.nextLine();
        String b = sc.nextLine();
        System.out.println("a = " + a + ", b = " + b); 
    }
}
java.io.BufferedReader
- 
    
문자 입력 스트림에서 텍스트를 읽는 클래스
 - 
    
문자의 순서(시퀀스)를 효율적으로 읽기 위하여 문자를 버퍼링
 
설명
- 
    
Buffer
- 
        
데이터를 한 곳에서 다른 곳으로 전송하기 전 일시적으로 그 데이터를 보관하는 임시 메모리 영역
 - 
        
입출력 속도 향상을 위해 버퍼 사용(속도 차이가 날 때, 묶어서 보내는 것이 더 효율적)
 
 - 
        
 - 
    
Stream
- 데이터의 흐름
 
 - 
    
BufferedReader : 문자 버퍼 입력, 라인(줄) 해석
- InputStreamReader : 바이트 스트림을 문자 스트림으로 변환
 
 - 
    
BufferedWriter : 문자 스트림에 버퍼 출력, 줄바꿈 사용
- OutputStreamWriter : 문자 스트림을 바이트 스트림으로 변환
 
 - 
    
BufferedWriter.flush : 버퍼 비우기
 
사용법
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.BufferedWriter;
import java.io.OutputStreamWriter;
public class Sunny {
    public static void main(String[] args) {
        // BufferedReader Object br 생성, System에서 입력한 값을 받음
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        // BufferedWriter Object bw 생성, System에 보낼 값을 받음
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        
        try {
            // 시스템에서 입력받은 값(br)을 bw로 보내시오
            bw.write(br.readLine());
            // br 닫기
            br.close();
            // bw에 쌓인 것 내보내기
            bw.flush();
            // bw 닫기
            bw.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
차이점
- 
    
BufferedReader는 동기식
- BufferedReader는 Scanner보다 훨씬 큰 버퍼 메모리를 가지고 있음
 
 - 
    
스캐너 : 1KB char 버퍼, BuffredReader : 8KB byte 버퍼
- Scanner는 입력 데이터를 파싱, BufferedReader는 문자 시퀀스를 읽음
 
 - 
    
BuffreredReader는 스캐너에 비해 조금 빠름
 
Subscribe via RSS