BufferedReader là một lớp đơn giản có nghĩa là đọc hiệu quả từ luồng dưới quyền. Nói chung, mỗi yêu cầu đọc được tạo từ một Trình đọc như FileReader sẽ khiến yêu cầu đọc tương ứng được thực hiện cho luồng bên dưới. Mỗi lệnh gọi read () hoặc readLine () có thể khiến các byte được đọc từ tệp, được chuyển đổi thành các ký tự và sau đó được trả về, có thể rất kém hiệu quả. Hiệu quả được cải thiện đáng kể nếu một Reader bị vênh trong BufferedReader.
BufferedReader được đồng bộ hóa, do đó, các thao tác đọc trên BufferedReader có thể được thực hiện một cách an toàn từ nhiều luồng.
Mặt khác, một máy quét có nhiều phô mai hơn được tích hợp bên trong nó; nó có thể làm tất cả những gì mà BufferedReader có thể làm và ở cùng mức độ hiệu quả. Tuy nhiên, ngoài ra, Trình quét có thể phân tích luồng bên dưới cho các kiểu và chuỗi nguyên thủy bằng cách sử dụng các biểu thức thông thường. Nó cũng có thể mã hóa luồng cơ bản với dấu phân cách bạn chọn. Nó cũng có thể thực hiện quét về phía trước luồng bên dưới bỏ qua dấu phân cách!
Tuy nhiên, một máy quét không phải là luồng an toàn, nó phải được đồng bộ hóa bên ngoài.
Việc lựa chọn sử dụng BufferedReader hoặc Scanner tùy thuộc vào mã bạn đang viết, nếu bạn đang viết một trình đọc nhật ký đơn giản Trình đọc đệm là đủ. Tuy nhiên, nếu bạn đang viết một trình phân tích cú pháp XML thì máy quét là sự lựa chọn tự nhiên hơn.
Ngay cả trong khi đọc đầu vào, nếu muốn chấp nhận từng dòng đầu vào của người dùng và nói chỉ cần thêm nó vào một tệp, BufferedReader là đủ tốt. Mặt khác, nếu bạn muốn chấp nhận đầu vào của người dùng dưới dạng một lệnh có nhiều tùy chọn và sau đó có ý định thực hiện các hoạt động khác nhau dựa trên lệnh và các tùy chọn được chỉ định, Máy quét sẽ phù hợp hơn.