English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Основной учебник Java

Java Управление потоком

Java Массив

Java Ориентированность на объекты (I)

Java Ориентированность на объекты (II)

Java Ориентированность на объекты (III)

Обработка исключений Java

Java Список (List)

Java Queue (очередь)

Сборники Java Map

Сборники Java Set

Ввод/вывод Java (I/O)

Reader/Writer Java

Другие темы Java

Класс Java InputStreamReader

В этом руководстве мы изучим Java InputStreamReader и его методы с помощью примеров.

Класс InputStreamReader пакета java.io можно использовать для преобразования байтовых данных в данные символов.

Он наследует абстрактный класс Reader.

Класс InputStreamReader работает вместе с другими потоками ввода. Он также известен как мост между потоками ввода и потоками символов. Это потому, что InputStreamReader читает из потока ввода байты, которые представляют собой символы.

Например, некоторые символы требуют 2 байта для хранения в памяти. Для чтения таких данных мы можем использовать потоковый читатель, который читает 2 байта и преобразует их в соответствующий символ.

Создание InputStreamReader

Для создания 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

Класс InputStreamReader предоставляет различные методы, существующие в классе Reader.

Метод read()

  • 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()

Метод 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()

Чтобы закрыть поток чтения, мы можем использовать метод close(). После вызова этого метода мы больше не сможем использовать читатель для чтения данных.

Другие методы InputStreamReader

МетодОписание
ready()Проверить, готов ли поток к чтению
mark()Маркировать положение уже прочитанных данных в потоке
reset()Сбросить маркер