Lớp CharArrayReader
(Class CharArrayReader)

Lớp CharArrayReader trong Java là một lớp thuộc gói java.io và được sử dụng để đọc các ký tự từ một mảng ký tự (char[]). Nó là một kế thừa của lớp Reader, cung cấp chức năng đọc tuần tự từ một mảng ký tự như thể đó là một luồng dữ liệu. Điều này rất hữu ích khi bạn muốn xử lý một đoạn văn bản được lưu trữ dưới dạng mảng ký tự trong bộ nhớ.

Khai báo lớp CharArrayReader trong Java

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

Cú pháp khai báo lớp CharArrayReader:

Cú pháp

public class CharArrayReader
extends Reader

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

↳ public class CharArrayReader: Đây là khai báo một lớp công khai (public) tên là CharArrayReader. Lớp này có thể được truy cập từ bất kỳ đâu trong dự án Java, miễn là nó được import hoặc ở cùng gói.

↳ extends Reader: Lớp CharArrayReader kế thừa (extends) Reader, nó kế thừa tất cả các phương thức và thuộc tính của Reader. Điều này có nghĩa là CharArrayReader phải triển khai các phương thức cần thiết để đọc ký tự từ một mảng ký tự.

Các trường trong lớp CharArrayReader

Lớp CharArrayReader sử dụng bốn trường để quản lý trạng thái đọc dữ liệu từ mảng ký tự:

↳ protected char[] buf: Mảng ký tự chứa dữ liệu cần đọc. Đây là mảng gốc được truyền vào khi tạo đối tượng CharArrayReader.

↳ protected int count: Chỉ số cuối cùng của mảng buf chứa dữ liệu hợp lệ. Nó biểu thị kích thước thực tế của dữ liệu trong mảng.

↳ protected int markedPos: Chỉ số vị trí đã được đánh dấu trong mảng buf. Khi phương thức mark() được gọi, giá trị hiện tại của pos được lưu vào markedPos để có thể quay lại vị trí đó sau này.

↳ protected int pos: Chỉ số vị trí hiện tại trong mảng buf đang được đọc. Khi đọc dữ liệu, giá trị của pos tăng dần.

Các Constructor của lớp CharArrayReader

Lớp CharArrayReader cung cấp hai constructor để tạo đối tượng và khởi tạo mảng ký tự:

↳ CharArrayReader(char[] buf): Tạo một CharArrayReader từ toàn bộ mảng ký tự buf.

↳ CharArrayReader(char[] buf, int offset, int length): Tạo một CharArrayReader từ một phần của mảng ký tự buf, bắt đầu từ vị trí offset và có độ dài length.

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

Các phương thức trong CharArrayReader cung cấp nhiều cách để đọc dữ liệu từ một mảng ký tự. Bạn có thể sử dụng chúng để đọc dữ liệu theo ký tự hoặc mảng ký tự, đánh dấu và đặt lại vị trí đọc trong luồng, 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 CharArrayReader trong Java:

↳ void close(): Đóng luồng và giải phóng tài nguyên.

↳ void mark(int readAheadLimit): Đánh dấu vị trí hiện tại trong luồng.

↳ boolean markSupported(): Luôn trả về true vì CharArrayReader hỗ trợ đánh dấu.

↳ int read(): Đọc một ký tự từ mảng.

↳ int read(char[] b, int off, int len): Đọc nhiều ký tự vào mảng b.

↳ boolean ready(): Luôn trả về true vì luôn có dữ liệu sẵn sàng để đọc.

↳ 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à một ví dụ về cách sử dụng lớp CharArrayReader trong Java để đọc dữ liệu từ một mảng ký tự:

Ví dụ: Example.java

import java.io.CharArrayReader;
import java.io.IOException;

public class Example {
    public static void main(String[] args) {
        // Mảng ký tự làm nguồn dữ liệu
        char[] charArray = {'X', 'i', 'n', ' ', 'c', 'h', 'à', 'o', '!', ' ', 'H', 'e', 'l', 'l', 'o', '!'};

        // Tạo một đối tượng CharArrayReader để đọc từ mảng ký tự
        try (CharArrayReader charArrayReader = new CharArrayReader(charArray)) {
            int data;
            while ((data = charArrayReader.read()) != -1) {
                // Chuyển giá trị int về char và in ra ký tự
                System.out.print((char) data);
            }
        } catch (IOException e) {
            e.printStackTrace(); // Xử lý ngoại lệ nếu có lỗi xảy ra
        }
    }
}

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

Xin chào! Hello!

Ví dụ trên minh họa cách sử dụng CharArrayReader để đọc từng ký tự từ một mảng ký tự trong bộ nhớ. Điều này có thể hữu ích trong các tình huống khi bạn cần xử lý văn bản hoặc dữ liệu trong bộ nhớ như thể bạn đang làm việc với một luồng đầu vào.

Ví dụ 2

Dưới đây là một ví dụ về cách sử dụng phương thức read(char[] b, int off, int len) của lớp CharArrayReader để đọc nhiều ký tự vào một mảng:

Ví dụ: Example.java

import java.io.CharArrayReader;
import java.io.IOException;

public class Example {
    public static void main(String[] args) {
        // Mảng ký tự làm nguồn dữ liệu
        char[] sourceArray = {'X', 'i', 'n', ' ', 'c', 'h', 'à', 'o', ' ', 'b', 'ạ', 'n', '!'};

        // Tạo đối tượng CharArrayReader để đọc từ mảng ký tự
        try (CharArrayReader charArrayReader = new CharArrayReader(sourceArray)) {
            // Mảng ký tự đích để chứa dữ liệu đọc được
            char[] destinationArray = new char[5];

            // Đọc 5 ký tự vào mảng destinationArray, bắt đầu từ vị trí 0 của mảng đích
            int numCharsRead = charArrayReader.read(destinationArray, 0, 5);

            // In số lượng ký tự đã đọc
            System.out.println("Số lượng ký tự đã đọc: " + numCharsRead);

            // In ra nội dung của mảng đích sau khi đọc
            System.out.println("Nội dung của mảng đích: ");
            System.out.println(destinationArray);

        } catch (IOException e) {
            e.printStackTrace(); // Xử lý ngoại lệ nếu có lỗi xảy ra
        }
    }
}

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

Số lượng ký tự đã đọc: 5
Nội dung của mảng đích:
Xin c

Phương thức read(char[] b, int off, int len) cho phép bạn đọc một số lượng ký tự nhất định từ nguồn vào một mảng ký tự đích, bắt đầu từ một vị trí cụ thể trong mảng đích. Đây là một cách hữu ích để đọc nhiều ký tự cùng lúc từ một luồng ký tự.

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.”