Respostas:
ByteArrayInputStream também faz o truque:
InputStream is = new ByteArrayInputStream( myString.getBytes( charset ) );
Em seguida, converta para o leitor:
InputStreamReader reader = new InputStreamReader(is);
ByteArrayInputStream : Desde: JDK1.0 Não há o menor motivo para supor que essa classe seja "desde o Java 1.4". Esse número de versão errado é especialmente estranho quando o Java 1.4 foi introduzido NIOe faz pouco sentido introduzir uma API e seu sucessor conceitual na mesma versão.
Eu também encontrei a IOUtilsclasse apache commons , então:
InputStreamReader isr = new InputStreamReader(IOUtils.toInputStream(myString));
new InputStreamReader(IOUtils.toInputStream(myString, "UTF-16"), "UTF-16")seria sem perdas.
Stringem uma byte[]matriz para converter os bytes de volta para chars então ...
Ele precisa ser especificamente um InputStreamReader? Que tal usar StringReader ?
Caso contrário, você pode usar StringBufferInputStream , mas está obsoleto devido a problemas de conversão de caracteres (e é por isso que você deve preferir StringReader).
Mesma pergunta que @Dan - por que não StringReader?
Se precisar ser InputStreamReader, então:
String charset = ...; // your charset
byte[] bytes = string.getBytes(charset);
ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
InputStreamReader isr = new InputStreamReader(bais);
byte[] bytes = charset.getBytes();
Você está tentando obter a) Readerfuncionalidade InputStreamReaderou b) InputStreamfuncionalidade InputStreamReader? Você não terá b). InputStreamReadernão é um InputStream.
O objetivo de InputStreamReaderé pegar uma InputStream- uma fonte de bytes - e decodificar os bytes para caracteres na forma de a Reader. Você já possui seus dados como caracteres (sua String original). Codificar sua String em bytes e decodificar os bytes de volta para chars seria uma operação redundante.
Se você está tentando tirar uma Readerproveito da sua fonte, use StringReader.
Se você está tentando obter um InputStream(que fornece apenas bytes), use o apache commons, IOUtils.toInputStream(..)conforme sugerido por outras respostas aqui.