2012-04-17 2 views
4

ScannerBufferedReader에서 입력을 가져 오는 것의 차이점은 무엇입니까? 여기사용자로부터 입력 받기

다음

A가 BufferedReader 예입니다 ...

BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); 
System.out.println("Enter characters, 'q' to quit."); 

// read characters 
do { 
    c = (char) br.read(); 
    System.out.println(c); 
} while(c != 'q'); 

을 그리고는

Scanner scan = new Scanner(System.in); 
char mrArray = new char[10]; 
// read characters 
for (int i = 0; i < myArray.length; i++) { 
    String temp = myScanner.next(); 
    myArray[i] = temp.charAt(0); 
} 

는 두 경우 사이에 어떤 차이가 있나요 ... Scanner 예입니다? 앞으로 어떤 수업이 변경 될 수 있습니까? BufferedStreamScanner보다 우선적으로 사용해야합니까?

답변

6

BufferedReader는 기본 스트림 인 에서 효율적으로 읽을 수있는 간단한 클래스입니다. 일반적으로 FileReader와 같이 Reader 으로 이루어진 각 읽기 요청은 기본 스트림 인 에 대한 해당 읽기 요청을 발생시킵니다. read() 또는 readLine()을 호출 할 때마다 바이트가 파일에서 읽히고 문자로 변환 된 다음 이 반환되어 매우 비효율적 일 수 있습니다. BufferedReader에서 Reader가 뒤틀린 경우 효율성이 상당히 향상됩니다 ( ).
BufferedReader가 동기화되므로 BufferedReader 의 읽기 작업을 안전하게 여러 스레드에서 수행 할 수 있습니다.

반면에 스캐너에는 더 많은 치즈가 내장되어 있습니다. 은 BufferedReader가 수행 할 수있는 모든 작업을 수행 할 수 있으며 동일한 수준의 효율성도 수행 할 수 있습니다. 그러나 스캐너는 일반 표현식을 사용하여 기본 유형 및 문자열에 대한 기본 스트림을 구문 분석 할 수 있습니다. 또한 사용자가 선택한 구분 기호로 기본 스트림을 토큰화할 수도 있습니다. 또한 기본 스트림을 구분 기호를 무시하고 스트림의 정방향 검색을 수행 할 수도 있습니다. 그러나 스캐너는 스레드가 안전하지 않은 이므로 외부 동기화해야합니다.

출처 : Scanner vs buffer reader 주요 실질적인 차이는 Scanner 1.5까지 도입하고, 따라서 그 전에 당신이 자신을 출력을 구문 분석 후 다양한 독자 라운드 System.in을 감싸고 할 수 밖에 없었다되지 않은 단순히이었다

4

Scanner는 스트림 내용에서 토큰을 구문 분석하는 데 사용되며, BufferedReader는 스트림을 읽고 단지 특수 구문 분석을 수행하지 않습니다.

실제로 BufferedReader를 스캐너에 전달하여 분석 할 문자 소스로 사용할 수 있으며 BufferedReader는 동기화되어 있으며 스캐너는 동기화되지 않으므로 사용자가 결정할 수 있습니다.

EDIT System.in은 스트림입니다.

2

당신이 원하는 것을 검색 할 수 있습니다.

스캐너는 지금 당신을 위해 많은 것을 관리합니다. 따라서 BufferedReader를 사용하고 자신이 전체적으로 구문 분석/처리해야하는 강력한 이유가 없으면 일반적으로 스캐너를 사용하게됩니다. 명확 해.