Pergunta

Como posso transformar um valor String em um InputStreamReader?

Foi útil?

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);
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top