Рубрики
Без рубрики

Как преобразовать входной поток в строку в Java

В Java мы можем использовать ByteArrayOutputStream для преобразования “входного потока” в “Строку”.

Автор оригинала: mkyong.

В этой статье показано несколько способов преобразования входного потока в Строку .

Темы

  1. Выходной поток ByteArrayOutputStream
  2. Входной поток#ReadAllBytes (Java 9)
  3. Средство чтения входного потока
  4. Средство чтения входного потока + БуферизоВанное средство чтения
  5. БуферизоВанный читатель#строк (Java 8)
  6. Общий доступ Apache IO
  7. Итак, какой из них?

1. Выходной поток ByteArrayOutputStream

В этом примере загрузите HTML-страницу с google.com в качестве входного потока , и мы используем ByteArrayOutputStream чтобы преобразовать входной поток в строку и распечатать его.

package com.mkyong.io.howto;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URI;
import java.nio.charset.StandardCharsets;

public class InputStreamToString {

    public static final int DEFAULT_BUFFER_SIZE = 8192;

    public static void main(String[] args) throws IOException {

        URI uri = URI.create("https://www.google.com/");
        try (InputStream inputStream = uri.toURL().openStream()) {

            // InputStream -> String
            String result = convertInputStreamToString(inputStream);
            System.out.println(result);

        }

    }

    // Plain Java
    private static String convertInputStreamToString(InputStream is) throws IOException {

        ByteArrayOutputStream result = new ByteArrayOutputStream();
        byte[] buffer = new byte[DEFAULT_BUFFER_SIZE];
        int length;
        while ((length = is.read(buffer)) != -1) {
            result.write(buffer, 0, length);
        }

        // Java 1.1
        return result.toString(StandardCharsets.UTF_8.name());

        // Java 10
        // return result.toString(StandardCharsets.UTF_8);

    }

}

2. ||чтобы преобразовать ||входной поток || в ||строку || и распечатать его. Входной поток#ReadAllBytes (Java 9)

чтобы преобразовать входной поток в строку и распечатать его. Входной поток#ReadAllBytes (Java 9) Java 9 вводит новый ReadAllBytes() API для Входной поток

  // Since Java 9
  private static String convertInputStreamToString(InputStream inputStream)
			throws IOException {
      // inputStream.readAllBytes() -> Java 9
      return new String(inputStream.readAllBytes(), StandardCharsets.UTF_8);
  }

чтобы преобразовать входной поток в строку

package java.io;

public abstract class InputStream implements Closeable {

		public byte[] readAllBytes() throws IOException {
				return readNBytes(Integer.MAX_VALUE);
		}

		//...
}

3. ||чтобы преобразовать ||входной поток || в ||строку || и распечатать его. Входной поток#ReadAllBytes (Java 9) Java 9 вводит новый ||ReadAllBytes()||API для || InputStream||класс, который может легко конвертировать ||inputstreamпросмотр исходного кода ||InputStream||, а количество прочитанных байтов ограничено || Кроме того, этот API не подходит для чтения большого объема данных. InputStreamReader MAX_VALUE тигр. ||к ||строке ||.

чтобы преобразовать входной поток в строку и распечатать его. Входной поток#ReadAllBytes (Java 9) Java 9 вводит новый ReadAllBytes() API для InputStream класс, который может легко конвертировать inputstreamпросмотр исходного кода

	private static String convertInputStreamToString(InputStream inputStream)
	 		throws IOException {

      final char[] buffer = new char[8192];
      final StringBuilder result = new StringBuilder();

      // InputStream -> Reader
      try (Reader reader = new InputStreamReader(inputStream, StandardCharsets.UTF_8)) {
          int charsRead;
          while ((charsRead = reader.read(buffer, 0, buffer.length)) > 0) {
              result.append(buffer, 0, charsRead);
          }
      }

      return result.toString();

  }

4. ||чтобы преобразовать ||входной поток || в ||строку || и распечатать его. Входной поток#ReadAllBytes (Java 9) Java 9 вводит новый ||ReadAllBytes()||API для || InputStream||класс, который может легко конвертировать ||inputstreamпросмотр исходного кода ||InputStream||, а количество прочитанных байтов ограничено || Кроме того, этот API не подходит для чтения большого объема данных. Читатель ||сначала и получить || Мы можем использовать ||InputStreamReader + BufferedReader Читатель ||позже. Строка ||из ||er|| для преобразования входного потока ||в ||putStreamReader MAX_VALUE tiger. ||к ||строке ||.

чтобы преобразовать входной поток в строку и распечатать его. Входной поток#ReadAllBytes (Java 9) Java 9 вводит новый ReadAllBytes() API для InputStream класс, который может легко конвертировать inputstreamпросмотр исходного кода InputStream , а количество прочитанных байтов ограничено

	private static String convertInputStreamToString(InputStream inputStream)
			throws IOException {

      String newLine = System.getProperty("line.separator");
      StringBuilder result = new StringBuilder();
      try (BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream))) {
          String line;
          while ((line = reader.readLine()) != null) {
              result
                      .append(line)
                      .append(newLine);
          }
      }
      return result.toString();

  }

5. ||чтобы преобразовать ||входной поток || в ||строку || и распечатать его. Входной поток#ReadAllBytes (Java 9) Java 9 вводит новый ||ReadAllBytes()||API для || InputStream||класс, который может легко конвертировать ||inputstreamпросмотр исходного кода ||InputStream||, а количество прочитанных байтов ограничено || Кроме того, этот API не подходит для чтения большого объема данных. Читатель ||сначала и получить ||Мы можем использовать ||InputStreamReader||читать ||символ || за раз, и это медленно. ||Inputstreathe обычной практикой является обертывание с помощью ||буферизованного считывателя |Однако этот метод преобразует исходные разрывы строк в системное свойство 8 строк буферизованного считывателя ||line.separator ||, которое является || \r\n|| в Windows, || \n|| в Linux. |.mreader + Считыватель буферизованного считывателя ||позже. Строка ||из ||er|| для преобразования входного потока ||в ||putStreamReader MAX_VALUE tiger. ||к ||строке ||.

чтобы преобразовать входной поток в строку и распечатать его. Входной поток#ReadAllBytes (Java 9) Java 9 вводит новый ReadAllBytes()

	private static String convertInputStreamToString(InputStream inputStream)
			throws IOException {

      String newLine = System.getProperty("line.separator");
      String result;
      try (Stream lines = new BufferedReader(new InputStreamReader(inputStream)).lines()) {
          result = lines.collect(Collectors.joining(newLine));
      }

      return result;

  }

P.S Этот метод также изменяет исходные разрывы строк.

6. Общий доступ Apache IO

Если у вас есть commons-io в проекте, попробуйте IOUtils.toString для преобразования Входной поток в Строку .

	
			commons-io
			commons-io
			2.7
	
	private static String convertInputStreamToString(InputStream inputStream)
			throws IOException {

			return IOUtils.toString(inputStream, StandardCharsets.UTF_8);

	}

Просмотрите IOUtils.toString исходный код, класс IOUtils копирует Входной поток в Строковый писатель .

package org.apache.commons.io;

	public class IOUtils {

			public static String toString(final InputStream input, final Charset charset)
					throws IOException {
	        try (final StringBuilderWriter sw = new StringBuilderWriter()) {
	            copy(input, sw, charset);
	            return sw.toString();
	        }
	    }

			//...
	}

Итак, какой из них?

  1. Выходной поток ByteArrayOutputStream – Я предпочитаю этот метод; он должен быть быстрее (меньше конверсии), без ограничений и работает везде.
  2. Входной поток#ReadAllBytes (Java 9) – Подходит для небольших данных, это официальный API. Не подходит для большого объема данных.
  3. InputStreamReader – Медленно, он считывает символ за раз.
  4. InputStreamReader + BufferedReader – Стандартное и читаемое решение, но оно изменяет исходные разрывы строк.
  5. BufferedReader#строки (Java 8) – Требуется Java 8, и он также изменяет исходные разрывы строк.
  6. Apache Commons IO – Библиотека для этого?

Скачать Исходный Код

$клон git $клон git

$cd java-ввод-вывод

Рекомендации

Оригинал: “https://mkyong.com/java/how-to-convert-inputstream-to-string-in-java/”