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


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".


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.


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

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.