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


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.


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

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.