Класс InputStreamReader
Класс InputStreamReader является мостом между потоком байтов и потоком символов: он читает байты из входного потока и декодирует их в символы с помощью указанной кодировки. Класс наследуется от абстрактного класса Reader. В первом параметре конструктора мы передаем входной поток байтов (например, InputStream или FileInputStream), во втором параметре можно передать название кодировки в виде строки или объект Charset. Если кодировка не указана, используется кодировка по умолчанию. Класс InputStreamReader также имеет метод getEncoding, возвращающий имя используемой кодировки.
Синтаксис
new InputStreamReader(InputStream in)
new InputStreamReader(InputStream in, String charsetName)
new InputStreamReader(InputStream in, Charset cs)
Пример
Давайте прочитаем строку из байтового массива, используя кодировку UTF-8:
import java.io.ByteArrayInputStream;
import java.io.InputStreamReader;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
public class Main
{
public static void main(String[] args) throws IOException
{
byte[] bytes = "abcde".getBytes(StandardCharsets.UTF_8);
ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
InputStreamReader isr = new InputStreamReader(bais, StandardCharsets.UTF_8);
int data;
while ((data = isr.read()) != -1)
{
System.out.print((char) data);
}
isr.close();
}
}
Результат выполнения кода:
"abcde"
Пример
Давайте прочитаем содержимое файла с указанием кодировки и выведем его в консоль:
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
public class Main
{
public static void main(String[] args) throws IOException
{
FileInputStream fis = new FileInputStream("test.txt");
InputStreamReader isr = new InputStreamReader(fis, StandardCharsets.UTF_8);
int data;
while ((data = isr.read()) != -1)
{
System.out.print((char) data);
}
isr.close();
}
}
Результат выполнения кода (при содержимом файла "12345"):
"12345"
Смотрите также
-
класс
InputStream,
который представляет поток байтов -
класс
Reader,
который представляет поток символов -
класс
BufferedReader,
который добавляет буферизацию при чтении символов -
класс
OutputStreamWriter,
который преобразует поток символов в поток байтов