Lớp InputStreamReader
(Class InputStreamReader)

Lớp InputStreamReader trong Java là một lớp chuyển đổi, thuộc gói java.io, dùng để đọc dữ liệu từ một InputStream (như FileInputStream hoặc BufferedInputStream) và chuyển đổi các byte đọc được thành ký tự theo một bảng mã (charset) nhất định. Nó là một lớp cầu nối giữa luồng byte (byte stream) và luồng ký tự (character stream).

Khai báo lớp InputStreamReader trong Java

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

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

Cú pháp

public class InputStreamReader
extends Reader

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

↳ public class InputStreamReader: Đây là khai báo một lớp công khai (public) tên là InputStreamReader. 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: Từ khóa extends cho biết rằng InputStreamReader là một lớp con (subclass) của lớp Reader. Điều này có nghĩa là InputStreamReader kế thừa tất cả các phương thức và thuộc tính của lớp Reader, đồng thời có thể thêm hoặc ghi đè các phương thức mới để cung cấp các chức năng cụ thể hơn. Lớp Reader là một lớp trừu tượng trong Java, đại diện cho các luồng ký tự đầu vào (character input stream).

Các Constructor của lớp InputStreamReader

Lớp InputStreamReader cung cấp bốn constructor để tạo đối tượng và thiết lập cách giải mã dữ liệu:

↳ InputStreamReader(InputStream in): Tạo một InputStreamReader sử dụng bảng mã mặc định của hệ thống để đọc từ luồng byte in.

↳ InputStreamReader(InputStream in, Charset cs): Tạo một InputStreamReader sử dụng bảng mã cs để đọc từ luồng byte in.

↳ InputStreamReader(InputStream in, CharsetDecoder dec): Tạo một InputStreamReader sử dụng bộ giải mã CharsetDecoder để đọc từ luồng byte in.

↳ InputStreamReader(InputStream in, String charsetName): Tạo một InputStreamReader sử dụng bảng mã có tên charsetName để đọc từ luồng byte in.

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

Các phương thức trong InputStreamReader cung cấp nhiều cách để đọc dữ liệu từ một luồng. Bạn có thể sử dụng chúng để đọc dữ liệu theo ký tự hoặc mảng ký tự, chuyển đổi dữ liệu từ byte sang ký tự bằng cách sử dụng mã hóa ký tự, và kiểm tra xem luồng có sẵn dữ liệu để đọc không. Dưới đây là danh sách tất cả các phương thức của lớp InputStreamReader trong Java:

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

↳ String getEncoding(): Trả về tên của bảng mã đang được sử dụng.

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

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

↳ boolean ready(): Kiểm tra xem luồng sẵn sàng để đọc hay không.

Ví dụ 1

Dưới đây là một ví dụ về cách sử dụng InputStreamReader để đọc dữ liệu từ một tệp văn bản:

Giả sử bạn có một tệp văn bản tên là example.txt với nội dung như sau:

Tệp tin: example.txt

Xin chào, thế giới!
Đây là một tệp văn bản mẫu.

Bạn có thể sử dụng InputStreamReader để đọc nội dung của tệp này như sau:

Ví dụ: Example.java

import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.nio.charset.StandardCharsets;

public class Example {
    public static void main(String[] args) {
        String filePath = "Example.txt"; // Đường dẫn tới tệp tin cần đọc

        // Sử dụng try-with-resources để tự động đóng InputStreamReader sau khi hoàn thành
        try (InputStreamReader reader = new InputStreamReader(new FileInputStream(filePath), StandardCharsets.UTF_8)) {
            int character;
            // Đọc từng ký tự từ tệp tin cho đến khi kết thúc tệp (trả về -1)
            while ((character = reader.read()) != -1) {
                System.out.print((char) character);  // In ký tự ra màn hình
            }
        } catch (IOException e) {
            e.printStackTrace(); // In thông báo lỗi nếu xảy ra
        }
    }
}

Khi chạy chương trình, bạn sẽ thấy nội dung của tệp example.txt được in ra màn hình:

Xin chào, thế giới!
Đây là một tệp văn bản mẫu.

Ví dụ này minh họa cách sử dụng InputStreamReader để đọc dữ liệu từ một tệp văn bản, chuyển đổi byte thành ký tự sử dụng bảng mã UTF-8, và hiển thị nội dung tệp trên màn hình.

Ví dụ 2

Dưới đây là một ví dụ khác về việc sử dụng InputStreamReader, trong đó dữ liệu được đọc từ System.in (luồng đầu vào chuẩn) và sau đó được in ra màn hình.

Ví dụ: Example.java

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Example {
    public static void main(String[] args) {
        // Khởi tạo InputStreamReader để đọc dữ liệu từ System.in (bàn phím)
        InputStreamReader inputStreamReader = new InputStreamReader(System.in);
        // Sử dụng BufferedReader để đọc chuỗi ký tự từ InputStreamReader
        BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
        System.out.println("Nhập văn bản, sau đó nhấn Enter:");

        try {
            // Đọc một dòng văn bản từ bàn phím
            String userInput = bufferedReader.readLine();
            // In ra dòng văn bản mà người dùng đã nhập
            System.out.println("Bạn đã nhập: " + userInput);
        } catch (IOException e) {
            e.printStackTrace(); // In thông báo lỗi nếu xảy ra
        } finally {
            try {
                // Đóng BufferedReader và InputStreamReader sau khi sử dụng
                bufferedReader.close();
                inputStreamReader.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

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

Nhập văn bản, sau đó nhấn Enter:
Hi Java
Bạn đã nhập: Hi Java

Ví dụ này minh họa cách sử dụng InputStreamReader để đọc dữ liệu từ luồng đầu vào chuẩn (bàn phím) và sử dụng BufferedReader để xử lý dòng ký tự, cho phép đọc từng dòng văn bản dễ dàng.

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