¿Cómo convierto una cadena en un InputStream en Java?

Respuestas:

1410

Me gusta esto:

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

Tenga en cuenta que esto supone que desea un InputStream que sea una secuencia de bytes que represente su cadena original codificada como UTF-8 .

Para versiones de Java inferiores a 7, reemplace StandardCharsets.UTF_8con "UTF-8".

Iain
fuente
1
¿No se pierde este juego de caracteres al hacer: Cadena -> bytes -> ByteArrayInputStream? Al intentar esto en, por ejemplo, "ü", los bytes tendrán la letra correcta, pero ByteArrayInputStream habrá perdido la conversión correcta. ¿O estoy equivocado?
Jonathan Ramos
20
StandardCharsets requiere un nivel mínimo de API 19.
Nantoka
3
@JonathanRamos no depende de la transmisión mantener la conversión. Depende de lo que sea que esté decodificando los bytes nuevamente en cadenas.
Cruncher
26
@Nantoka En lugar de StandardCharsets.UTF_8, puede usar Charset.forName ("UTF-8") para cualquier nivel de API.
PJ_Finnegan
su trabajo solo agrego String newStr = URLDecoder.decode (URLEncoder.encode (respuesta, "iso8859-1"), "UTF-8"); for (utf8)
sirmagid
275

Me parece que usar Apache Commons IO hace que mi vida sea mucho más fácil.

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

Es posible que la biblioteca también ofrezca muchos otros accesos directos a las tareas más comunes que puede utilizar en su proyecto.

Elijah
fuente
55
Utilizaron el nuevo ByteArrayInputStream (exampleString.getBytes ("UTF-8")). Por lo tanto, será una forma optimizada de usar InputStream stream = new ByteArrayInputStream (exampleString.getBytes ("UTF-8"));
Pankaj Kumar
99
@PankajKumar: el compilador JIT de Java es más que capaz de alinear esto.
Andrew White
8
Usar un método que no especifica la codificación es una idea terrible ...
b1nary.atr0phy
2
@ b1naryatr0phy: Apache commons incluye otra forma de este método que toma la codificación como un segundo parámetro (que, tiene razón, es preferible): InputStream in = IOUtils.toInputStream (fuente, "UTF-8");
Cuga
8
Puede usar la StandardCharsets.UTF_8definición en lugar de texto sin formato.
douglaslps