Luồng đầu vào xử lý các byte thô. Khi bạn đọc trực tiếp từ luồng đầu vào, tất cả những gì bạn nhận được là byte thô nơi bộ ký tự không liên quan.
Việc giải thích byte thô thành ký tự, theo định nghĩa, yêu cầu một số loại bản dịch: làm cách nào để dịch từ byte thô thành chuỗi có thể đọc được? "Bản dịch" đó xuất hiện dưới dạng một bộ ký tự.
Lớp "đã thêm" này được thực hiện bởi Người đọc. Do đó, để đọc các ký tự (thay vì byte) từ một luồng, bạn cần phải xây dựng một số Reader
của một số loại (tùy thuộc vào nhu cầu của bạn) trên đầu luồng. Ví dụ:
InputStream is = ...;
Reader reader = new InputStreamReader(is, Charset.forName("UTF-16"));
Điều này sẽ gây ra reader.read()
để đọc các ký tự sử dụng bộ ký tự bạn chỉ định. Nếu bạn muốn đọc toàn bộ dòng, hãy sử dụng BufferedReader
ở trên cùng:
BufferedReader reader = new BufferedReader(new InputStreamReader(is, Charset.forName("UTF-16")));
String line = reader.readLine();
Nếu lớp này cho phép, bạn có thể làm như vậy tại ranh giới giữa luồng byte và luồng ký tự. (InputStreamReader là một lớp như vậy, đối với các Reader khác không cung cấp cho bạn tùy chọn chỉ định bộ ký tự, chỉ cần quấn nó quanh InputStreamReader). Cấu trúc thấp hơn ở mức InputStream (luồng byte) không có khái niệm về bộ ký tự. – nhahtdh