Как мне превратить строку в InputStreamReader в Java?

StackOverflow https://stackoverflow.com/questions/247161

  •  05-07-2019
  •  | 
  •  

Вопрос

Как я могу преобразовать значение String в InputStreamReader ?

Это было полезно?

Решение

ByteArrayInputStream также помогает:

InputStream is = new ByteArrayInputStream( myString.getBytes( charset ) );

Другие советы

Я также обнаружил класс apache commons IOUtils , поэтому:

InputStreamReader isr = new InputStreamReader(IOUtils.toInputStream(myString));

Должен ли это быть именно InputStreamReader? Как насчет использования StringReader ?

В противном случае вы можете использовать StringBufferInputStream , но это устарело из-за проблем с преобразованием символов (именно поэтому вы должны предпочесть StringReader).

Тот же вопрос, что и @Dan - почему не StringReader?

Если это должен быть InputStreamReader, тогда:

String charset = ...; // your charset
byte[] bytes = string.getBytes(charset);
ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
InputStreamReader isr = new InputStreamReader(bais);

Вы пытаетесь получить а) функциональность Reader из InputStreamReader или b) функциональность InputStream из InputStreamReader ? Вы не получите б). InputStreamReader не является InputStream .

Цель InputStreamReader - взять InputStream - источник байтов - и декодировать байты в символы в виде Reader . У вас уже есть данные в виде символов (ваша исходная строка). Кодирование вашей String в байты и декодирование байтов обратно в символы будет избыточной операцией.

Если вы пытаетесь получить Reader из своего источника, используйте StringReader .

Если вы пытаетесь получить InputStream (который дает вам только байты), используйте apache commons IOUtils.toInputStream (..) , как предлагается другими ответами здесь.

Вы можете попробовать Cactoos :

InputStream stream = new InputStreamOf(str);

Тогда, если вам нужен Reader :

Reader reader = new ReaderOf(stream);
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top