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

Supongamos que tengo un InputStream que contiene datos de texto y quiero convertirlo en una String (por ejemplo, para poder escribir el contenido de la secuencia en un archivo de registro).

¿Cuál es la forma más fácil de tomar InputStream y convertirlo en una String ?

 public String convertStreamToString(InputStream is) { // ??? } 

Esta es mi versión,

 public static String readString(InputStream inputStream) throws IOException { ByteArrayOutputStream into = new ByteArrayOutputStream(); byte[] buf = new byte[4096]; for (int n; 0 < (n = inputStream.read(buf));) { into.write(buf, 0, n); } into.close(); return new String(into.toByteArray(), "UTF-8"); // Or whatever encoding } 

Si desea hacerlo de manera simple y confiable, sugiero usar el método IOUtils.toString(java.io.InputStream, java.lang.String) biblioteca IO de Apache Jakarta Commons .

 String text = new Scanner( inputStream).useDelimiter("\\A").next(); 

más aquí

Puede usar un BufferedReader para leer el flujo en un StringBuilder en un bucle, y luego obtener el contenido completo del StringBuilder :

 public String convertStreamToString(InputStream is) { BufferedReader reader = new BufferedReader(new InputStreamReader(is)); StringBuilder sb = new StringBuilder(); String line = null; try { while ((line = reader.readLine()) != null) { sb.append(line + "\n"); } } catch (IOException e) { e.printStackTrace(); } finally { try { is.close(); } catch (IOException e) { e.printStackTrace(); } } return sb.toString(); } 

Divulgación completa : esta es una solución que encontré en KodeJava.org . Lo estoy publicando aquí para comentarios y críticas.