Como posso transformar uma string em uma InputStreamReader em java?
Pergunta
Como posso transformar um valor String
em um InputStreamReader
?
Solução
ByteArrayInputStream também faz o truque:
InputStream is = new ByteArrayInputStream( myString.getBytes( charset ) );
Outras dicas
Eu também achei o apache commons classe IOUtils
, assim:
InputStreamReader isr = new InputStreamReader(IOUtils.toInputStream(myString));
Será que ela tem que ser especificamente um InputStreamReader? Que tal usar StringReader ?
Caso contrário, você poderia usar StringBufferInputStream , mas está obsoleto por causa de problemas de conversão de caracteres (que é por isso que você deve preferir StringReader).
@ Dan - por que não StringReader
Se ele tem que ser InputStreamReader, então:
String charset = ...; // your charset
byte[] bytes = string.getBytes(charset);
ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
InputStreamReader isr = new InputStreamReader(bais);
Você está tentando obter a) a funcionalidade Reader
fora do InputStreamReader
, ou b) a funcionalidade InputStream
fora do InputStreamReader
? Você não terá b). InputStreamReader
não é uma InputStream
.
O objetivo da InputStreamReader
é fazer um InputStream
- uma fonte de bytes - e decodificar os bytes de caracteres na forma de uma Reader
. Você já tem seus dados como caracteres (o string original). Codificação de sua String em bytes e decodificar os bytes de volta para caracteres seria uma operação redundante.
Se você está tentando obter uma Reader
fora de sua fonte, StringReader
uso.
Se você está tentando obter uma InputStream
(que só lhe dá bytes), use apache commons IOUtils.toInputStream(..)
como sugerido por outras respostas aqui.
Você pode tentar Cactoos :
InputStream stream = new InputStreamOf(str);
Então, se você precisa de um Reader
:
Reader reader = new ReaderOf(stream);