Como posso transformar um String
valor em um InputStreamReader
?
281
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 introduzidoNIO
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:fonte
new InputStreamReader(IOUtils.toInputStream(myString, "UTF-16"), "UTF-16")
seria sem perdas.String
em umabyte[]
matriz para converter os bytes de volta parachar
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).
fonte
Mesma pergunta que @Dan - por que não StringReader?
Se precisar ser InputStreamReader, então:
fonte
byte[] bytes = charset.getBytes();
Você está tentando obter a)
Reader
funcionalidadeInputStreamReader
ou b)InputStream
funcionalidadeInputStreamReader
? Você não terá b).InputStreamReader
não é umInputStream
.O objetivo de
InputStreamReader
é pegar umaInputStream
- uma fonte de bytes - e decodificar os bytes para caracteres na forma de aReader
. 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, useStringReader
.Se você está tentando obter um
InputStream
(que fornece apenas bytes), use o apache commons,IOUtils.toInputStream(..)
conforme sugerido por outras respostas aqui.fonte
Você pode experimentar o Cactoos :
Então, se você precisar de
Reader
:fonte