Bufferedreader là gì
Lớp tốt nhất để đọc dữ liệu nhập từ Console là lớp BufferedReader. Tuy nhiên chúng ta không thể xây dựng một lớp BufferedReader trực tiếp từ System.in. Thay vào đó chúng ta phải chuyển nó thành một luồng ký tự. Để làm điều này chúng ta dùng InputStreamReader chuyển bytes thành ký tự. Để có được một đối tượng InputStreamReader gắn với System.in ta dùng constructor của InputStreamReader. InputStreamReader(InputStream inputStream) Tiếp theo dùng đối tượng InputStreamReader đã tạo ra để tạo ra một BufferedReader dùng constructor BufferedReader. BufferedReader(Reader inputReader) Ví dụ: Tạo một BufferedReader gắn với Keyboard BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); Sau khi thực hiện câu lệnh trên, br là một luồng ký tự gắn với Console thông qua System.in. Ví dụ: Dùng BufferedReader đọc từng ký tự từ Console. Việc import java.io.*; public static void main(String args[]) throws IOException char c; BufferedReader br = newBufferedReader( new InputStreamReader(System.in)); System.out.println("Nhap chuoi ky tu, // read characters { c = (char) br.read(); } } Trương Đình Huy 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ì ? 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ề intLỗi thường gặp khi sử dụng scanner.nextX() X=Int || Float || Double || Byte || Byte || Short || Long hoặc chỉ là next() : 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 BufferedReader đọc một vài ký tự từ luồng được chỉ định và lưu trữ nó trong bộ đệm. Điều này giúp nhập liệu nhanh hơn. InputStreamReader chỉ đọc một ký tự từ luồng đã chỉ định và các ký tự còn lại vẫn còn trong luồng. Thí dụ: class NewClass{ public static void main(String args[]) throws IOException{ BufferedReader isr = new BufferedReader(new InputStreamReader(System.in)); Scanner sc = new Scanner(System.in); System.out.println("B.R. - "+(char)isr.read()); System.out.println("Scanner - " + sc.nextLine()); } }Khi câu lệnh isr.read () được thực thi, tôi đã nhập đầu vào "hello" và ký tự "h" của "hello" được in trên màn hình. Nếu đây là InputStreamReader thì các ký tự còn lại “ello” sẽ vẫn còn trong luồng System.in và sc.nextLine () sẽ in chúng. Nhưng trong trường hợp này, điều đó không xảy ra vì BufferedReader đọc tất cả các ký tự “xin chào” từ luồng System.in và lưu trữ chúng trong bộ đệm cá nhân của riêng nó và do đó luồng System.in vẫn trống khi sc.nextLine () là Thực thi. Đối với mã: class NewClass{ public static void main(String args[]) throws IOException{ InputStreamReader isr = new InputStreamReader(System.in); Scanner sc = new Scanner(System.in); System.out.println("I.S.R. - "+(char)isr.read()); System.out.println("Scanner - " + sc.nextLine()); } }Trong trường hợp này InputStreamReader chỉ đọc một ký tự cho đầu vào “hello” và “ello” còn lại vẫn nằm trong luồng System.in và những ký tự này được in bởi sc.nextLine (); Phần kết luận: BufferedReader đọc một vài ký tự (ngay cả khi chúng ta chỉ muốn một ký tự, nó sẽ đọc nhiều hơn thế) từ Dòng đầu vào và lưu trữ chúng trong bộ đệm. Đó là lý do tại sao nó được gọi là BufferedReader. Tôi không thể biết nó đọc được bao nhiêu ký tự trong một lượt. Nó thay đổi từ 3 đến 10 khi tôi kiểm tra nó cho câu trả lời này. InputStreamReader chỉ đọc một ký tự từ luồng đầu vào và các ký tự còn lại vẫn còn trong luồng. Không có bộ đệm trung gian trong trường hợp này. Khi một hoặc nhiều Luồng hoặc đối tượng muốn đọc các ký tự từ System.in thì trong trường hợp đó, InputStreamReader nên được sử dụng vì nó chỉ đọc một ký tự và phần còn lại có thể được sử dụng bởi các đối tượng hoặc luồng khác. BufferedReader nhanh vì nó duy trì một bộ đệm và việc truy xuất dữ liệu từ bộ đệm luôn nhanh hơn so với việc lấy dữ liệu từ disk / stdin. 7 hữu ích 4 bình luận chia sẻ |