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

Чтение текста из InputStream

Если я начинаю с java.io.InputStream, то какой самый простой способ прочитать весь поток в String (предположим utf-8)?

Это должно быть довольно легко, но я в основном человек С#, и Google не дает мне этого. Спасибо.

4b9b3361

Ответ 1

В зависимости от того, с какими лицензиями вам удобнее, это один лайнер с библиотекой IO Jakarta-Commons.

Ответ 2

Укажите кодировку символов. Не теряйте код, вводите ошибки и медленное выполнение с помощью BufferedReader.

Вот пример. Вы можете параметризовать его с размером буфера, кодировкой и т.д.

static String readString(InputStream is) throws IOException {
  char[] buf = new char[2048];
  Reader r = new InputStreamReader(is, "UTF-8");
  StringBuilder s = new StringBuilder();
  while (true) {
    int n = r.read(buf);
    if (n < 0)
      break;
    s.append(buf, 0, n);
  }
  return s.toString();
}

Ответ 3

Использование Commons-IO, вероятно, будет лучшим вариантом. Для вашего интереса другой подход заключается в том, чтобы скопировать все байты и затем преобразовать его в строку.

public static String readText(InputStream is, String charset) throws IOException {
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    byte[] bytes = new byte[4096];
    for(int len;(len = is.read(bytes))>0;)
        baos.write(bytes, 0, len);
    return new String(baos.toByteArray(), charset);
}

Ответ 4

Я нашел хороший способ в Java 8 с потоками:

public static String readString(InputStream is) {
    BufferedReader br = new BufferedReader(new InputStreamReader(is));
    String content = br.lines().reduce("", String::concat);
    return content;
}

Как указано выше, вы можете поменять новый InputStreamReader (is) на новый InputStreamReader (есть, "UTF-8" ), но у меня нет опыта работы с этим конструктором.

Ответ 5

Чтение/запись из потоков очень болезненно в Java.

public static String getStreamContents(InputStream stream) throws IOException {

    StringBuilder content = new StringBuilder()

    Reader reader = new BufferedReader(new InputStreamReader(stream, "UTF-8"))
    String lineSeparator = System.getProperty("line.separator");

    try {
        String line
        while ((line = reader.readLine()) != null) {
            content.append(line + lineSeparator)
        }
        return content.toString()

    } finally {
        reader.close()
    }

}