Lớp BufferedReader
(Class BufferedReader)
Lớp BufferedReader trong Java là một lớp con của lớp Reader, được sử dụng để đọc dữ liệu ký tự từ một luồng đầu vào. Nó hoạt động bằng cách đệm các ký tự, giúp giảm thiểu số lần truy cập vào nguồn dữ liệu gốc, từ đó tăng tốc độ đọc. Có thể tùy chỉnh kích thước bộ đệm khi khởi tạo đối tượng. Phương thức readLine() là đặc trưng của BufferedReader, cho phép đọc từng dòng văn bản một cách tiện lợi.
Khai báo lớp BufferedReader trong Java
Để sử dụng lớp BufferedReader, bạn cần import gói java.io bạn cần thêm câu lệnh import vào đầu file Java của mình. Gói này cung cấp các lớp và giao diện để thực hiện các hoạt động nhập xuất (I/O) trong Java.
Cú pháp câu lệnh import:
Cú pháp
import java.io.BufferedReader;
Cú pháp khai báo lớp BufferedReader:
Cú pháp
public class BufferedReader
extends Reader
Dưới đây là giải thích chi tiết về cú pháp khai báo này:
↳ public: Từ khóa public chỉ ra rằng lớp BufferedReader có thể được truy cập từ bất kỳ đâu trong chương trình, nghĩa là nó có thể được sử dụng bởi các lớp và gói khác mà không bị hạn chế quyền truy cập.
↳ class BufferedReader: Từ khóa class chỉ ra rằng BufferedReader là một lớp trong Java.
↳ extends Reader: Lớp BufferedReader kế thừa từ lớp Reader, điều này có nghĩa là nó mở rộng và kế thừa các phương thức của lớp Reader. BufferedReader kế thừa các phương thức từ Reader, như read(), close(), và các phương thức khác, đồng thời bổ sung thêm các phương thức riêng để cải thiện
Các Constructor của lớp BufferedReader
Lớp BufferedReader cung cấp hai constructor để tạo đối tượng:
↳ BufferedReader(Reader in): Tạo một đối tượng BufferedReader sử dụng bộ đệm có kích thước mặc định để đọc từ luồng ký tự in.
↳ BufferedReader(Reader in, int sz): Tạo một đối tượng BufferedReader sử dụng bộ đệm có kích thước sz để đọc từ luồng ký tự in.
Các phương thức của lớp BufferedReader
Các phương thức trong BufferedReader cung cấp các cách khác nhau để tương tác với dữ liệu. Bạn có thể sử dụng chúng để đọc dữ liệu theo dòng hoặc theo ký tự, đánh dấu vị trí trong luồng, đặt lại luồng về vị trí đã đánh dấu, và kiểm tra xem luồng còn dữ liệu để đọc hay không. Dưới đây là danh sách tất cả các phương thức của lớp BufferedReader trong Java:
↳ void close(): Đóng luồng và giải phóng tài nguyên.
↳ Stream<String> lines(): Trả về một Stream chứa các dòng văn bản từ luồng.
↳ void mark(int readAheadLimit): Đánh dấu vị trí hiện tại trong luồng.
↳ boolean markSupported(): Luôn trả về true vì BufferedReader hỗ trợ đánh dấu.
↳ int read(): Đọc một ký tự.
↳ int read(char[] cbuf, int off, int len): Đọc nhiều ký tự vào mảng cbuf.
↳ String readLine(): Đọc một dòng văn bản.
↳ boolean ready(): Kiểm tra xem luồng sẵn sàng để đọc hay không.
↳ void reset(): Đặt lại vị trí của luồng về vị trí đã đánh dấu.
↳ long skip(long n): Bỏ qua n ký tự.
Ví dụ 1
Dưới đây là ví dụ về cách sử dụng lớp BufferedReader để đọc dữ liệu từ một tệp văn bản và in ra từng dòng:
Ví dụ: Example.java
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
public class Example {
public static void main(String[] args) {
// Đường dẫn đến tệp văn bản
String filePath = "Example.txt";
// Sử dụng try-with-resources để tự động đóng BufferedReader
try (BufferedReader bufferedReader = new BufferedReader(new FileReader(filePath))) {
String line;
// Đọc từng dòng từ tệp cho đến khi hết dữ liệu
while ((line = bufferedReader.readLine()) != null) {
// In dòng đọc được ra màn hình
System.out.println(line);
}
} catch (IOException e) {
// Xử lý lỗi nếu có
e.printStackTrace();
}
}
}
Kết quả của chương trình là
Chào mừng bạn đến với Java
Ví dụ trên cho thấy cách sử dụng BufferedReader để đọc từng dòng của tệp văn bản và in ra màn hình. Phương thức readLine() là cách chính để đọc dữ liệu dòng từ BufferedReader, và try-with-resources giúp đảm bảo tài nguyên được giải phóng đúng cách.
Ví dụ 2
Dưới đây là một ví dụ khác về cách sử dụng lớp BufferedReader để đọc dữ liệu từ một chuỗi thay vì từ một tệp văn bản. Ví dụ này sử dụng lớp StringReader để cung cấp dữ liệu cho BufferedReader.
Ví dụ: Example.java
import java.io.BufferedReader;
import java.io.IOException;
import java.io.StringReader;
public class Example {
public static void main(String[] args) {
// Chuỗi dữ liệu để đọc
String data = "Dòng 1\nDòng 2\nDòng 3";
// Tạo StringReader từ chuỗi dữ liệu
try (BufferedReader bufferedReader = new BufferedReader(new StringReader(data))) {
String line;
// Đọc từng dòng từ chuỗi cho đến khi hết dữ liệu
while ((line = bufferedReader.readLine()) != null) {
// In dòng đọc được ra màn hình
System.out.println(line);
}
} catch (IOException e) {
// Xử lý lỗi nếu có
e.printStackTrace();
}
}
}
Kết quả của chương trình là
Dòng 2
Dòng 3
Ví dụ trên cho thấy cách sử dụng BufferedReader để đọc dữ liệu từ một chuỗi thay vì từ một tệp văn bản. Điều này có thể hữu ích khi bạn cần xử lý dữ liệu được lưu trữ trong bộ nhớ thay vì trên đĩa.