Автор оригинала: mkyong.
В этой статье показано несколько способов преобразования входного потока
в Строку
.
Темы
- Выходной поток ByteArrayOutputStream
- Входной поток#ReadAllBytes (Java 9)
- Средство чтения входного потока
- Средство чтения входного потока + БуферизоВанное средство чтения
- БуферизоВанный читатель#строк (Java 8)
- Общий доступ Apache IO
- Итак, какой из них?
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 (Streamlines = 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(); } } //... }
Итак, какой из них?
- Выходной поток ByteArrayOutputStream – Я предпочитаю этот метод; он должен быть быстрее (меньше конверсии), без ограничений и работает везде.
- Входной поток#ReadAllBytes (Java 9) – Подходит для небольших данных, это официальный API. Не подходит для большого объема данных.
- InputStreamReader – Медленно, он считывает
символ
за раз. - InputStreamReader + BufferedReader – Стандартное и читаемое решение, но оно изменяет исходные разрывы строк.
- BufferedReader#строки (Java 8) – Требуется Java 8, и он также изменяет исходные разрывы строк.
- Apache Commons IO – Библиотека для этого?
Скачать Исходный Код
$клон git $клон git
$cd java-ввод-вывод
Рекомендации
- ByteArrayOutputStream javadoc в формате javadoc
- Общий доступ Apache IO
- Преобразование входного потока в строку на Java
- Преобразование входного потока в файл на Java
- Преобразование строки во входной поток на Java
- Примеры буферизованного чтения Java
Оригинал: “https://mkyong.com/java/how-to-convert-inputstream-to-string-in-java/”