-
1. BufferReader VS Scanner 차이점프로그래밍언어/Java(초급) 2020. 3. 27. 01:00
-
BufferReader : from JDK 1.1
-
Scanneer : from JDK 1.5
1. Scanner 은 버퍼리더 보다 훨씬 활용적이다.
스캐너는 정수 값으로 int, short, long, 소수값으로 float,double를 구분지어 읽어들일 수 있고 String 값도 읽을 수있다. 반면에 BufferReader은 문자열 String값 밖에 읽지 못한다.
2. BufferedReader은 Scanner에 비해 상당히 큰 버퍼를 차지한다.
Scanner의 경우 (1KB) , BufferedReader은 (8KB) , 이것은 즉 긴 문자열이 포함된 파일을 읽을 시에는 BufferedReader을
추천하지만 내용이 짧을경우 Scanner을 사용하는 것을 추천한다.
3. BufferedReader은 Scanner보다 더 오래되었다.
BufferedReader 은 JDK 1.1 에서 부터 존재해 왔고 Scanner은 JDK 1.5realse 에서 처음 소개 됬다.
4. Scanner은 정규식을 사용하여 값을 파싱한다.
예를 들어 int, long, short, florat 혹은 double의 경우 nextInt(),nextLong(),nextShort(),nextFloat(), nextDouble() 과같은
함수들을 사용한다. 반면에 BufferedReader은 오직 문자열 값만을 읽기 때문에 readLine() 함수만을 사용한다.
5. 중요한 차이점은 BufferedReader의 경우 동기화를 사용하지만 Scanner은 사용하지 않는다.
즉 여러 스레드간에 Scanner은 공유할 수 없지만 BufferReader개체는 공유할 수 있다. 동기화를 사용하는 BufferedReader의 경우 single thread를 사용하는 Scanner보다 약간 느리다. 하지만 Scanner의 경우 정규식을 사용하여 값을 받으므로 이러한 속도 차이는 보상을 넘어 BufferedReader가 더 빠르게 문자열을 읽을 수 있게 된다.
버퍼 또는 캐시에 입력값이 저장되는 과정 예시
import java.io.BufferedReader; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; import java.util.Scanner; /** * Java Program to demonstrate how to use Scanner and BufferedReader class in * Java. * * @author WINDOWS 8 * */ public class ScannerVsBufferedReader{ public static void main(String[] args) { // Using Scanner to read user input Scanner scnr = new Scanner(System.in); System.out.println("======================================="); System.out.println("You can use Scanner to read user input"); System.out.println("Please enter a String"); String name = scnr.nextLine(); System.out.println("You have entered " + name); System.out.println("Please enter an integer"); int age = scnr.nextInt(); System.out.println("You have entered " + age); scnr.close(); // Using BufferedReader to read a file System.out.println("======================================="); System.out.println("You can use BufferedReader to read a file"); System.out.println("======================================="); FileReader fileReader; try { fileReader = new FileReader("abc.txt"); BufferedReader buffReader = new BufferedReader(fileReader); System.out.println("File contains following lines"); String line = buffReader.readLine(); while (line != null) { System.out.println(line); line = buffReader.readLine(); } buffReader.close(); fileReader.close(); } catch (IOException e) { e.printStackTrace(); } } } Output ======================================= You can use Scanner to read user input ======================================= Please enter a String James You have entered James Please enter an integer 32 You have entered 32 ======================================= You can use BufferedReader to read a file ======================================= File contains following lines 1. Which is best SmartPhone in the market? a) iPhone 6S b) Samsung Galaxy Edge c) Something else
reference
5 Difference between BufferedReader and Scanner class in Java - File Tutorial Example
A blog about Java, Spring, Hibernate, Programming, Algorithms, Data Structure, SQL, Linux, Database, JavaScript, and my personal experience.
www.java67.com
'프로그래밍언어 > Java(초급)' 카테고리의 다른 글
2. OOP(Object Oriented Programming) 상속 (0) 2020.04.02 1. OOP(Object Oriented Programming) 캡슐화 (0) 2020.04.01 5. Collection 프레임워크 (ArrayList vs LinkedList) (0) 2020.03.29 4. StringBuilder & StringBuffer 클래스 다루기 (0) 2020.03.27 3. Java 문자열(String) 다루기 (0) 2020.03.27 -