Подтвердить что ты не робот

Как преобразовать InputStream в String в Java?

Предположим, что у меня есть InputStream, который содержит текстовые данные, и я хочу преобразовать его в String (например, чтобы я мог написать содержимое потока в файл журнала).

Каков самый простой способ взять InputStream и преобразовать его в String?

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

Ответ 1

Это моя версия,

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
}

Ответ 3

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

Единственная хитрость - вспомнить регулярное выражение \A, которое соответствует началу ввода. Это эффективно говорит Scanner о токенизации всего потока от начала до (нелогичного) следующего начала...
- из блога Oracle

Ответ 4

Вы можете использовать BufferedReader для чтения потока в StringBuilder в цикле, а затем получить полное содержимое из 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(); 
} 

Полное раскрытие: Это решение, которое я нашел на KodeJava.org. Я размещаю его здесь для комментариев и критики.