Ответы:
ByteArrayInputStream также добивается цели :
InputStream is = new ByteArrayInputStream( myString.getBytes( charset ) );
Затем преобразуйте в читателя:
InputStreamReader reader = new InputStreamReader(is);
ByteArrayInputStream
: Since: JDK1.0 Нет ни малейшей причины предполагать, что этот класс «начиная с Java 1.4». Этот неправильный номер версии особенно странен, когда появилась Java 1.4, NIO
и нет смысла вводить API и его концептуальный преемник в одной и той же версии.
Я также нашел IOUtils
класс Apache Commons , так что:
InputStreamReader isr = new InputStreamReader(IOUtils.toInputStream(myString));
new InputStreamReader(IOUtils.toInputStream(myString, "UTF-16"), "UTF-16")
будет без потерь.
String
в byte[]
массив, чтобы преобразовать байты обратно в char
s тогда…
Это должен быть конкретно 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);
byte[] bytes = charset.getBytes();
Вы пытаетесь получить а) Reader
функциональность InputStreamReader
или б) InputStream
функциональность InputStreamReader
? Вы не получите б). InputStreamReader
не является InputStream
.
Цель InputStreamReader
состоит в том, чтобы взять InputStream
- источник байтов - и декодировать байты в символы в форме a Reader
. У вас уже есть данные в виде символов (исходная строка). Кодирование вашей String в байты и декодирование байтов обратно в символы будет избыточной операцией.
Если вы пытаетесь получить Reader
из своего источника, используйте StringReader
.
Если вы пытаетесь получить InputStream
(который дает вам только байты), используйте Apache Commons, IOUtils.toInputStream(..)
как предложено другими ответами здесь.