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 NIO
e faz pouco sentido introduzir uma API e seu sucessor conceitual na mesma versão.
Eu também encontrei a IOUtils
classe apache commons , então:
InputStreamReader isr = new InputStreamReader(IOUtils.toInputStream(myString));
new InputStreamReader(IOUtils.toInputStream(myString, "UTF-16"), "UTF-16")
seria sem perdas.
String
em uma byte[]
matriz para converter os bytes de volta para char
s 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) Reader
funcionalidade InputStreamReader
ou b) InputStream
funcionalidade InputStreamReader
? Você não terá b). InputStreamReader
nã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 Reader
proveito 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.