Lớp FilterReader
(Class FilterReader)

Lớp FilterReader là một lớp trừu tượng (abstract) trong Java thuộc gói java.io, được sử dụng làm lớp cơ sở cho các lớp đọc dữ liệu ký tự có chức năng lọc dữ liệu khi đọc. Nó cho phép bạn thực hiện các thao tác xử lý dữ liệu trước khi truyền dữ liệu đó đến các lớp đọc khác.

Lọc dữ liệu: Loại bỏ các ký tự không mong muốn, chuyển đổi chữ hoa thành chữ thường, hoặc thực hiện các thao tác biến đổi khác trên dữ liệu khi đọc.

Khai báo lớp FilterReader trong Java

Để sử dụng lớp FilterReader, 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.FilterReader;

Cú pháp khai báo Lớp FilterReader:

Cú pháp

public abstract class FilterReader
extends Reader

Dưới đây là giải thích chi tiết về cú pháp khai báo này:

↳ public: Lớp FilterReader có thể được truy cập từ bất kỳ đâu trong chương trình, miễn là nó nằm trong phạm vi của các package đã import.

↳ abstract: Lớp này là một lớp trừu tượng, có nghĩa là bạn không thể tạo ra đối tượng của lớp FilterReader trực tiếp. Lớp này chỉ có thể được kế thừa bởi các lớp con khác. Các lớp con sẽ phải cung cấp các triển khai cụ thể cho các phương thức trừu tượng của lớp FilterReader.

↳ class FilterReader: Đây là tên của lớp, FilterReader.

↳ extend Reader: Từ khóa extend cho biết rằng lớp FilterReader kế thừa từ lớp Reader. Lớp FilterReader là một lớp con của lớp Reader, nghĩa là nó thừa hưởng tất cả các thuộc tính và phương thức của lớp Reader và có thể mở rộng hoặc ghi đè các phương thức đó để thêm chức năng hoặc thay đổi cách hoạt động của lớp cha.

Trường trong lớp FilterReader

Lớp FilterReader có một trường duy nhất là protected Reader in

↳ protected: Từ khóa protected cho biết rằng trường in có thể được truy cập từ các lớp con của FilterReader và từ các lớp trong cùng một gói (package). Nó không thể được truy cập từ bên ngoài lớp hoặc gói nếu không phải là lớp con.

↳ Reader: Đây là kiểu dữ liệu của trường in. Reader là lớp cơ sở cung cấp các phương thức để đọc ký tự từ luồng đầu vào. Trong trường hợp này, in là một đối tượng của loại Reader, cho biết luồng đầu vào thực tế mà FilterReader đang làm việc với.

↳ in: Đây là tên của trường. Trong FilterReader, in đại diện cho luồng đầu vào thực tế mà các lớp kế thừa sẽ sử dụng để thực hiện các thao tác đọc. FilterReader thường không đọc dữ liệu trực tiếp mà làm việc với một luồng đầu vào đã được cung cấp.

Các Constructor của lớp FilterReader

Lớp FilterReader có một constructor duy nhất:

↳ protected FilterReader(Reader in): Tạo một đối tượng FilterReader mới, bao bọc luồng ký tự in.

Các phương thức của lớp FilterReader

Lớp FilterReader kế thừa từ Reader và cung cấp một bộ các phương thức để tương tác với dữ liệu ký tự được lọc. Dưới đây là danh sách tất cả các phương thức của lớp FilterReader trong Java:

↳ void close(): Đóng luồng và giải phóng tài nguyên hệ thống liên quan.

↳ void mark(int readAheadLimit): Đánh dấu vị trí hiện tại trong luồng để có thể quay lại sau này bằng phương thức reset(). Tham số readAheadLimit chỉ định số lượng ký tự có thể được đọc trước khi đánh dấu bị mất hiệu lực.

↳ boolean markSupported(): Trả về true nếu luồng hỗ trợ đánh dấu, thường là true đối với FilterReader.

↳ int read(): Đọc một ký tự từ luồng. Trả về giá trị của ký tự hoặc -1 nếu đã đến cuối luồng.

↳ int read(char[] cbuf, int off, int len): Đọc tối đa len ký tự vào mảng cbuf bắt đầu từ vị trí off. Trả về số lượng ký tự đã đọc hoặc -1 nếu đã đến cuối luồng.

↳ boolean ready(): Kiểm tra xem luồng có sẵn dữ liệu để đọc ngay lập tức hay không.

↳ void reset(): Đặt lại vị trí của luồng về vị trí đã được đánh dấu bằng phương thức mark().

↳ long skip(long n): Bỏ qua n ký tự trong luồng. Trả về số lượng ký tự thực sự đã bỏ qua.

Ví dụ 1

Dưới đây là một ví dụ đơn giản về cách sử dụng lớp FilterReader để đọc dữ liệu từ một luồng đầu vào và chuyển đổi tất cả các ký tự chữ hoa thành chữ thường:

Ví dụ: Example.java

import java.io.FilterReader;
import java.io.IOException;
import java.io.Reader;
import java.io.StringReader;

class LowerCaseFilterReader extends FilterReader {

    protected LowerCaseFilterReader(Reader in) {
        super(in);
    }

    @Override
    public int read() throws IOException {
        int c = super.read();
        if (c == -1) {
            return -1;  // End of stream
        }
        return Character.toLowerCase(c);  // Chuyển ký tự thành chữ thường
    }

    public static void main(String[] args) {
        String input = "Xin Chào Thế Giới! Đây Là Một Bài Kiểm Tra.";

        try (Reader reader = new LowerCaseFilterReader(new StringReader(input))) {
            int c;
            while ((c = reader.read()) != -1) {
                System.out.print((char) c);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

Kết quả của chương trình là:

xin chào thế giới! đây là một bài kiểm tra.

Ví dụ này sử dụng lớp FilterReader để tạo một lớp con đơn giản có chức năng chuyển đổi tất cả các ký tự chữ hoa thành chữ thường khi đọc từ luồng đầu vào. Đây là một ứng dụng cơ bản nhưng hiệu quả của FilterReader trong việc xử lý dữ liệu đầu vào.

Ví dụ 2

Dưới đây là một ví dụ đơn giản khác về cách sử dụng lớp FilterReader để loại bỏ tất cả các ký tự số từ dữ liệu đầu vào:

Ví dụ: Example.java

import java.io.FilterReader;
import java.io.IOException;
import java.io.Reader;
import java.io.StringReader;

 class RemoveDigitsFilterReader extends FilterReader {

    protected RemoveDigitsFilterReader(Reader in) {
        super(in);
    }

    @Override
    public int read() throws IOException {
        int c = super.read();
        if (c == -1) {
            return -1;  // End of stream
        }
        if (Character.isDigit(c)) {
            return read();  // Đọc ký tự tiếp theo nếu ký tự hiện tại là số
        }
        return c;  // Trả về ký tự không phải số
    }

    public static void main(String[] args) {
        String input = "X44i44n, Ch44à4o";

        try (Reader reader = new RemoveDigitsFilterReader(new StringReader(input))) {
            int c;
            while ((c = reader.read()) != -1) {
                System.out.print((char) c);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

Kết quả của chương trình là:

Xin Chào

Ví dụ này sử dụng lớp FilterReader để tạo một lớp con có chức năng loại bỏ tất cả các ký tự số từ dữ liệu đầu vào. Đây là một ứng dụng đơn giản và hữu ích của FilterReader để xử lý và lọc dữ liệu trong Java.

Câu Nói Truyền Cảm Hứng

“Bắt đầu ở đâu không quan trọng, quan trọng là bạn sẵn sàng bắt đầu.” – W. Clement Stone

Không Gian Tích Cực

“Chúc bạn luôn giữ vững niềm tin và sức mạnh để vượt qua mọi thử thách trong cuộc sống.”