Trong hướng dẫn này, chúng ta sẽ tìm hiểu về InputStreamReader trong Java và các phương thức của nó với sự trợ giúp của các ví dụ.
lớp InputStreamReader của gói java.io có thể được sử dụng để chuyển đổi dữ liệu theo byte vào dữ liệu trong ký tự.
Nó mở rộng lớp trừu tượng Reader.
lớp InputStreamReader làm việc với các dòng đầu vào khác. Nó còn được gọi là cầu nối giữa các luồng byte và các luồng ký tự. Điều này là do các InputStreamReader byte đọc từ luồng đầu vào dưới dạng ký tự.
Ví dụ: một số ký tự yêu cầu 2 byte để được lưu trữ trong bộ nhớ. Để đọc dữ liệu đó, chúng ta có thể sử dụng trình đọc luồng đầu vào đọc 2 byte cùng nhau và chuyển đổi thành ký tự tương ứng.
Nội dung chính
1. Tạo một InputStreamReader
Để tạo một InputStreamReader, trước tiên chúng ta phải nhập gói java.io.InputStreamReader. Khi chúng tôi nhập gói ở đây là cách chúng tôi có thể tạo trình đọc luồng đầu vào.
// Creates an InputStream
FileInputStream file = new FileInputStream(String path);
// Creates an InputStreamReader
InputStreamReader input = new InputStreamReader(file);
Trong ví dụ trên, chúng tôi đã tạo ra một InputStreamReader tên đầu vào cùng với cái FileInputStream tên tập tin.
Tại đây, dữ liệu trong tệp được lưu trữ bằng một số mã hóa ký tự mặc định.
Tuy nhiên, chúng tôi cũng có thể chỉ định loại mã hóa ký tự ( UTF8 hoặc UTF16 ) trong tệp.
// Creates an InputStreamReader specifying the character encoding
InputStreamReader input = new InputStreamReader(file, Charset cs);
Ở đây, chúng tôi đã sử dụng lớp Charset để chỉ định mã hóa ký tự trong tệp.
2. Phương thức của InputStreamReader
lớp InputStreamReader cung cấp triển khai cho các phương thức khác nhau trình bày trong lớp Reader.
2.1 phương thức read()
- read() – đọc một ký tự duy nhất từ trình đọc
- read(char[] array) – đọc các ký tự từ trình đọc và lưu trữ trong mảng được chỉ định
- read(char[] array, int start, int length) – đọc số ký tự bằng chiều dài từ trình đọc và lưu trữ trong mảng được chỉ định bắt đầu từ khởi đầu
Ví dụ: giả sử chúng ta có một tệp tên input.txt với nội dung như sau.
This is a line of text inside the file.
Hãy thử đọc tệp này bằng cách sử dụng InputStreamReader.
This is a line of text inside the file.
Đầu ra
import java.io.InputStreamReader;
import java.io.FileInputStream;
class Main {
public static void main(String[] args) {
// Creates an array of character
char[] array = new char[100];
try {
// Creates a FileInputStream
FileInputStream file = new FileInputStream("input.txt");
// Creates an InputStreamReader
InputStreamReader input = new InputStreamReader(file);
// Reads characters from the file
input.read(array);
System.out.println("Data in the stream:");
System.out.println(array);
// Closes the reader
input.close();
}
catch(Exception e) {
e.getStackTrace();
}
}
}
Đầu ra
Data in the stream:
This is a line of text inside the file.
Trong ví dụ trên, chúng tôi đã tạo một trình đọc luồng đầu vào bằng luồng đầu vào tệp. Trình đọc luồng đầu vào được liên kết với tệp input.txt .
FileInputStream file = new FileInputStream("input.txt");
InputStreamReader input = new InputStreamReader(file);
Để đọc các ký tự từ tệp, chúng tôi đã sử dụng phương thức read().
3. Phương thức getEncoding ()
phương thức getEncoding() có thể được sử dụng để có được các loại mã hóa được sử dụng để lưu trữ dữ liệu trong dòng đầu vào. Ví dụ,
import java.io.InputStreamReader;
import java.nio.charset.Charset;
import java.io.FileInputStream;
class Main {
public static void main(String[] args) {
try {
// Creates a FileInputStream
FileInputStream file = new FileInputStream("input.txt");
// Creates an InputStreamReader with default encoding
InputStreamReader input1 = new InputStreamReader(file);
// Creates an InputStreamReader specifying the encoding
InputStreamReader input2 = new InputStreamReader(file, Charset.forName("UTF8"));
// Returns the character encoding of the input stream
System.out.println("Character encoding of input1: " + input1.getEncoding());
System.out.println("Character encoding of input2: " + input2.getEncoding());
// Closes the reader
input1.close();
input2.close();
}
catch(Exception e) {
e.getStackTrace();
}
}
}
Đầu ra
The character encoding of input1: Cp1252
The character encoding of input2: UTF8
Trong ví dụ trên, chúng tôi đã tạo 2 trình đọc luồng đầu vào có tên input1 và input2.
- input1 không chỉ định mã hóa ký tự. Do đó, phương thức getEncoding() trả về tên chuẩn của mã hóa ký tự mặc định.
- input2 chỉ định mã hóa ký tự, UTF8 . Do đó, phương thức getEncoding()trả về mã hóa ký tự được chỉ định.
Lưu ý : Chúng tôi đã sử dụng phương thức Charset.forName() để chỉ định loại mã hóa ký tự. Để tìm hiểu thêm, hãy truy cập Java Charset (tài liệu Java chính thức) .
3.1 phương thức close()
Để đóng trình đọc luồng đầu vào, chúng ta có thể sử dụng phương thức close(). Khi close()phương thức được gọi, chúng ta không thể sử dụng bộ đọc để đọc dữ liệu.
4. Các phương thức InputStreamReader khác
phương thức | Sự miêu tả |
ready() | kiểm tra xem luồng đã sẵn sàng để đọc chưa |
mark() | đánh dấu vị trí trong luồng mà dữ liệu đã được đọc |
reset() | trả lại điều khiển về điểm trong luồng nơi đánh dấu được đặt |
Để tìm hiểu thêm, hãy truy cập Java InputStreamReader (tài liệu Java chính thức) .
Cài ứng dụng cafedev để dễ dàng cập nhật tin và học lập trình mọi lúc mọi nơi tại đây.
Nguồn và Tài liệu tiếng anh tham khảo:
Tài liệu từ cafedev:
- Full series tự học Java từ cơ bản tới nâng cao tại đây nha.
- Ebook về Java tại đây.
- Các nguồn kiến thức MIỄN PHÍ VÔ GIÁ từ cafedev tại đây
Nếu bạn thấy hay và hữu ích, bạn có thể tham gia các kênh sau của cafedev để nhận được nhiều hơn nữa:
Chào thân ái và quyết thắng!