English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
В этом руководстве мы изучим Java InputStreamReader и его методы с помощью примеров.
Класс InputStreamReader пакета java.io можно использовать для преобразования байтовых данных в данные символов.
Он наследует абстрактный класс Reader.
Класс InputStreamReader работает вместе с другими потоками ввода. Он также известен как мост между потоками ввода и потоками символов. Это потому, что InputStreamReader читает из потока ввода байты, которые представляют собой символы.
Например, некоторые символы требуют 2 байта для хранения в памяти. Для чтения таких данных мы можем использовать потоковый читатель, который читает 2 байта и преобразует их в соответствующий символ.
Для создания InputStreamReader нам нужно сначала импортировать пакет java.io.InputStreamReader. После импорта пакета можно создать потоковый читатель.
//Создание InputStream FileInputStream file = new FileInputStream(String path); //Создание InputStreamReader InputStreamReader input = new InputStreamReader(file);
В примере выше мы создали InputStreamReader с именем input и FileInputStream с именем file.
Здесь данные файла хранятся с использованием некоторых стандартных кодировок символов.
Но мы также можем указать тип кодировки символов в файле (UTF8илиUTF16)
//Создание InputStreamReader с указанием кодировки символов InputStreamReader input = new InputStreamReader(file, Charset cs);
Здесь мы используем класс Charset для указания кодировки символов файла.
Класс InputStreamReader предоставляет различные методы, существующие в классе Reader.
read() - Читает из читателя один символ
read(char[] array) - Читает символы из читателя и хранит их в указанном массиве
read(char[] array, int start, int length) - Читает из читателя количество символов, равное length, и хранит их в указанном массиве, начиная с position
Например, предположим, что у нас есть файл с именемinput.txtв котором содержится следующее.
This is a line of text inside the file.
Попробуем использовать для чтения файла InputStreamReader.
import java.io.InputStreamReader; import java.io.FileInputStream; class Main { public static void main(String[] args) { //Создание массива символов char[] array = new char[100]; try { //Создание FileInputStream FileInputStream file = new FileInputStream("input.txt"); //Создание InputStreamReader InputStreamReader input = new InputStreamReader(file); // читать символы из файла input.read(array); System.out.println("Данные потока:"); System.out.println(array); // закрывать reader input.close(); } catch(Exception e) {}} e.getStackTrace(); } } }
Результат вывода
данные потока: This is a line of text inside the file.
В примере выше мы использовали файловый поток для создания потокового читателя.input.txtссылка.
FileInputStream file = new FileInputStream("input.txt"); InputStreamReader input = new InputStreamReader(file);
Чтобы читать символы из файла, мы используем метод read().
Метод getEncoding() может быть использован для получения типа кодировки символов, используемой для хранения данных в входном потоке. Например:
import java.io.InputStreamReader; import java.nio.charset.Charset; import java.io.FileInputStream; class Main { public static void main(String[] args) { try { // создавать FileInputStream FileInputStream file = new FileInputStream("input.txt"); // создавать InputStreamReader с использованием кодировки по умолчанию InputStreamReader input1 = new InputStreamReader(file); // создавать InputStreamReader с указанной кодировкой InputStreamReader input2 = new InputStreamReader(file, Charset.forName("UTF8")); // возвращать кодировку символов входного потока System.out.println("Кодировка символов input1: " + input1.getEncoding()); System.out.println("Кодировка символов input2: " + input2.getEncoding()); // закрывать reader input1.close(); input2.close(); } catch(Exception e) {}} e.getStackTrace(); } } }
Результат вывода
Кодировка символов input1: Cp1252 Кодировка символов input2: UTF8
В上面的 примере мы создали два потока чтения, названные input1 и input2.
input1 не указать кодировку символов. Поэтому метод getEncoding() возвращает имя стандарта кодировки по умолчанию.
input2 указать кодировку символовUTF8. Поэтому метод getEncoding() возвращает указанную кодировку символов.
Внимание: Мы уже использовали метод Charset.forName() для указания типа кодировки символов.
Чтобы закрыть поток чтения, мы можем использовать метод close(). После вызова этого метода мы больше не сможем использовать читатель для чтения данных.
Метод | Описание |
---|---|
ready() | Проверить, готов ли поток к чтению |
mark() | Маркировать положение уже прочитанных данных в потоке |
reset() | Сбросить маркер |