Как мне превратить String в InputStreamReader в java?

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

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
282
0
173 763
6
Перейти к ответу Данный вопрос помечен как решенный

Ответы 6

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

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

Ответ принят как подходящий

ByteArrayInputStream также делает свое дело:

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

Затем конвертируйте в читателя:

InputStreamReader reader = new InputStreamReader(is);

Вы можете хочу унаследовать кодировку платформы по умолчанию.

slim 29.10.2008 18:21

Спасибо. Сделанный. Как лучше всего определить кодировку платформы по умолчанию?

Guido 29.10.2008 19:14

Или просто используйте getBytes () без параметра ... Возможно, он не должен существовать, но он будет использовать кодировку по умолчанию.

Michael Borgwardt 11.08.2009 19:34
ByteArrayInputStream : С: JDK1.0 Нет ни малейшей причины предполагать, что этот класс «начиная с Java 1.4». Этот неправильный номер версии особенно странен, поскольку Java 1.4 представила NIO, и не имеет смысла вводить API и его концептуального преемника в одной и той же версии.
Holger 31.03.2015 14:00

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

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

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

Хорошо, но 2-я строка должна быть byte[] bytes = charset.getBytes();

AabinGunz 18.11.2011 10:53

Я так не думаю, Абхишек. В моем примере строка - это экземпляр String, к которому вы хотите получить доступ с помощью InputStreamReader.

toolkit 18.11.2011 14:35

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

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

Преобразование String-> byte [] или наоборот без упоминания кодировки символов почти всегда является ошибкой.

Joachim Sauer 11.08.2009 19:31

Это может привести к потере данных в зависимости от кодировки платформы по умолчанию и символов в строке. Было бы лучше указать кодировку Unicode для операций кодирования и декодирования. Прочтите это для более подробной информации: незаконныйargumentexception.blogspot.com/2009/05/…

McDowell 11.08.2009 19:44

Разве параметр кодировки не нужен только для получения байтов в определенной кодировке? Я думаю, пока вы выбираете ту же кодировку для вызова String # getBytes, что и для конструктора InputSTreamReader, на самом деле не имеет значения, какую из них вы выберете. Я почти уверен, что Иоахим и Макдауэлл неправы в данном конкретном случае. Для обертывания InputStreamReader вокруг String не требуются знания кодирования.

Stijn de Witt 03.12.2010 18:10

@Stijn de Witt - запоздалый ответ, я знаю, но я только что видел это. Если кодировка платформы по умолчанию не поддерживает кодовые точки в строке, это приведет к потере данных. Если ваша кодировка по умолчанию - UTF-8, нет проблем. Если вы работаете в Windows, вы потеряете большую часть набора Unicode, потому что эти JRE по умолчанию используют устаревшие кодировки «ANSI». Доказательство находится в опубликованной мной ссылке. new InputStreamReader(IOUtils.toInputStream(myString, "UTF-16"), "UTF-16") будет без потерь.

McDowell 22.02.2011 23:46

ура, используя стороннюю библиотеку, чтобы превратить однострочник в ... более крупный однострочник. Не говоря уже о бесполезном преобразовании String в массив byte[] для преобразования байтов обратно в char

Holger 31.03.2015 14:04

Собственно, посмотрите на реализацию: IOUtils.toInputStream(myString, StandardCharsets.UTF_8) также просто создает ByteArrayInputStream: new ByteArrayInputStream(input.getBytes(Charsets.toCharset(encod‌​ing))).

Matthias B 22.11.2018 13:20

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

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

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

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

Вы можете попробовать Какту:

InputStream stream = new InputStreamOf(str);

Затем, если вам нужен Reader:

Reader reader = new ReaderOf(stream);

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