Ответы:
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[]массив, чтобы преобразовать байты обратно в chars тогда…
Это должен быть конкретно 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(..)как предложено другими ответами здесь.