Nếu bạn là một Java programmer thì hẳn là bạn cũng đã tiếp xúc nhiều với Scanner và BufferedReader dùng để nhập input đầu vào xử lí. Vậy sự khác biệt giữa Scanner và BufferedReader là gì ?
Class Scanner có thể đọc được các kiểu nguyên thủy và string khác nhau. Dễ thấy qua các method nextInt(), nextFloat(), nextDouble(), . . .
Class BufferedReader đọc text qua InputStreamReader chỉ đọc được text (String) nên hiệu quả hơn trong việc đọc text nhưng ta vẫn có thể chuyển kiểu về Int, Float, . . . nếu cần. BufferedReader là Đồng Bộ trong khi Scanner thì không vì thế với đa luồng ta cần sử dụng BufferedReader .
BufferedReader có bộ nhớ đệm lơn hơn nhiều so với Scanner trong khi Scanner(1KB) còn BufferedReader(8KB)
Dùng Scanner:
Scanner scanner = new Scanner(System.in);
int number = scanner.nextInt();
Dùng BufferedReader:
BufferedReader br = new BufferedReader(new
InputStreamReader(System.in));
String str = br.readLine()// giả sử tôi nhập 13
int number = Integer.parseInt(str);//chuyển kiểu về int
Lỗi thường gặp khi sử dụng scanner.nextX() X=Int || Float || Double || Byte || Byte || Short || Long hoặc chỉ là next() :
Nếu ta sử dụng nextLine() sau nextX() ở trên thì sẽ xảy ra lỗi là ta không đọc được giá trị dòng tiếp theo cần nhập bởi vì sau khi ta nhập nextX() ở trên ta còn ấn Enter 1 cái mà enter cũng được coi là 1 kí tự \n lên nextLine() sẽ đọc cái \n này chứ không lấy giá trị sau nó. Vì vậy để xử lí lỗi này ta cần thêm một next() hoặc nextLine() để đọc kí tự xuống dòng đó rồi. Sau đó nextLine() của ta mới đọc giá trị tiếp theo.
Code tham khảo
Scanner scanner = new Scanner();
int number = scanner.nextInt();
scanner.next(); // hoặc scanner.nextLine();
String = scanner.nextLine();
reference : https://www.geeksforgeeks.org/difference-between-scanner-and-bufferreader-class-in-java/
Conal Dev