Java InputStreamReader (Với các ví dụ)

Trong hướng dẫn này, chúng ta sẽ tìm hiểu về Java InputStreamReader và các phương thức của nó với sự trợ giúp của các ví dụ.

Các InputStreamReaderlớp của java.iogói 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.

Các InputStreamReaderlớp học 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 InputStreamReaderbyte đọ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.

Tạo một InputStreamReader

Để tạo một InputStreamReader, java.io.InputStreamReadertrước tiên chúng ta phải nhập gói. 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 một InputStreamReaderđầu vào được đặt tên cùng với FileInputStreamtệp được đặt tên.

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 Charsetlớp để chỉ định mã hóa ký tự trong tệp.

Phương thức của InputStreamReader

Các InputStreamReaderlớp học cung cấp triển khai cho các phương pháp khác nhau trình bày trong Readerlớp.

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 độ dài từ trình đọc và lưu trữ trong mảng được chỉ định bắt đầu từ đầ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.

 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

 Dữ liệu trong luồng: Đây là một dòng văn bản bên trong tệp. 

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 nhập 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 read()phương pháp.

Phương thức getEncoding ()

Các getEncoding()phương pháp 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

 Mã hóa ký tự của đầu vào1: Cp1252 Mã hóa ký tự của đầu vào2: UTF8 

Trong ví dụ trên, chúng ta đã tạo 2 đầu đọc luồng đầu vào có tên là input1 và input2.

  • input1 không chỉ định mã hóa ký tự. Do đó, getEncoding()phương thức 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 đó, getEncoding()phương thức trả về mã hóa ký tự được chỉ định.

Lưu ý : Chúng tôi đã sử dụng Charset.forName()phương pháp để 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).

phương thức close ()

Để đóng trình đọc luồng đầu vào, chúng ta có thể sử dụng close()phương pháp. Khi close()phương thức được gọi, chúng ta không thể sử dụng bộ đọc để đọc dữ liệu.

Các phương thức InputStreamReader khác

phương pháp 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).

thú vị bài viết...