Como faço para converter uma String em um InputStream em Java?

856

Dada uma sequência:

String exampleString = "example";

Como faço para convertê-lo em um InputStream?

Iain
fonte

Respostas:

1410

Como isso:

InputStream stream = new ByteArrayInputStream(exampleString.getBytes(StandardCharsets.UTF_8));

Observe que isso pressupõe que você deseja um InputStream que seja um fluxo de bytes que represente sua cadeia original codificada como UTF-8 .

Para versões do Java menores que 7, substitua StandardCharsets.UTF_8por "UTF-8".

Iain
fonte
1
Este conjunto de caracteres não se perde ao executar: String -> bytes -> ByteArrayInputStream? Ao tentar isso em, por exemplo, "ü", os bytes terão a letra correta, mas o ByteArrayInputStream terá perdido a conversão correta. Ou eu estou errado?
Jonathan Ramos
20
StandardCharsets requer nível mínimo API 19.
Nantoka
3
@ JonathanRamos, não cabe ao fluxo manter a conversão. Depende do que estiver decodificando os bytes novamente em strings.
Cruncher
26
@Nantoka Em vez de StandardCharsets.UTF_8, você pode usar Charset.forName ("UTF-8") para qualquer nível de API.
PJ_Finnegan
seu trabalho apenas adiciono String newStr = URLDecoder.decode (URLEncoder.encode (resposta, "iso8859-1"), "UTF-8"); for (utf8)
sirmagid 22/02
275

Acho que usar o Apache Commons IO facilita muito minha vida.

String source = "This is the source of my input stream";
InputStream in = org.apache.commons.io.IOUtils.toInputStream(source, "UTF-8");

Você pode achar que a biblioteca também oferece muitos outros atalhos para tarefas comuns que você pode usar em seu projeto.

Elias
fonte
5
Eles usaram o novo ByteArrayInputStream (exampleString.getBytes ("UTF-8")). Portanto, será uma maneira otimizada de usar o InputStream stream = new ByteArrayInputStream (exampleString.getBytes ("UTF-8"));
Pankaj Kumar
9
@PankajKumar: O compilador JIT do Java é mais do que capaz de incorporar isso.
Andrew White
8
Usando um método que não especifica codificação é uma péssima idéia ...
b1nary.atr0phy
2
@ b1naryatr0phy: O Apache commons inclui outra forma deste método, que utiliza a codificação como um segundo parâmetro (o que você prefere): InputStream in = IOUtils.toInputStream (source, "UTF-8");
Cuga
8
Você pode usar a StandardCharsets.UTF_8definição em vez do texto sem formatação.
Douglaslps