Android java stream to string

Содержание
  1. Rukovodstvo
  2. статьи и идеи для разработчиков программного обеспечения и веб-разработчиков.
  3. Преобразование InputStream в строку в Java
  4. Класс InputStream — это класс высокого уровня, представляющий любой поток байтов ввода в Java. Различные подклассы дополнительно определяют его использование, например BufferedInputStream, ByteArrayInputStream, SequenceInputStream и т. Д. Очевидно, что InputStream может хранить любые данные, а в некоторых случаях они хранят содержимое String как поток байтов. В этом руководстве мы рассмотрим, как преобразовать InputStream в строку Java. Начнем с создания InputStream, который мы будем использовать на протяжении всего
  5. InputStream в String с InputStream.readAllBytes ()
  6. InputStream в String с ByteArrayOutputStream
  7. InputStream в String с InputStreamReader
  8. InputStream в String с BufferedReader
  9. InputStream в String с помощью BufferedReader.lines ()
  10. InputStream в String с помощью Apache Commons
  11. Заключение
  12. Convert Java Stream to String
  13. Using Collectors.joining
  14. Using Stream.reduce
  15. How to convert InputStream to String in Java
  16. 1. ByteArrayOutputStream
  17. 2. InputStream#readAllBytes (Java 9)
  18. 3. InputStreamReader + StringBuilder
  19. 4. InputStreamReader + BufferedReader (modified line breaks)
  20. 5. Java 8 BufferedReader#lines (modified line breaks)
  21. 6. Apache Commons IO

Rukovodstvo

статьи и идеи для разработчиков программного обеспечения и веб-разработчиков.

Преобразование InputStream в строку в Java

Класс InputStream — это класс высокого уровня, представляющий любой поток байтов ввода в Java. Различные подклассы дополнительно определяют его использование, например BufferedInputStream, ByteArrayInputStream, SequenceInputStream и т. Д. Очевидно, что InputStream может хранить любые данные, а в некоторых случаях они хранят содержимое String как поток байтов. В этом руководстве мы рассмотрим, как преобразовать InputStream в строку Java. Начнем с создания InputStream, который мы будем использовать на протяжении всего

Класс InputStream — это класс высокого уровня, представляющий любой поток байтов ввода в Java. Различные подклассы дополнительно определяют его использование, например BufferedInputStream , ByteArrayInputStream , SequenceInputStream и т. Д.

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

В этом руководстве мы рассмотрим, как преобразовать InputStream в строку Java .

Начнем с создания InputStream который мы будем использовать во всех примерах. Они могут поступать из разных источников, но давайте сделаем один из String , чтобы упростить проверку правильности вывода:

 String string = "Input data, to be converted into an InputStream."; InputStream inputStream = new ByteArrayInputStream(string.getBytes()); 

InputStream — это абстрактный класс, и мы использовали один из его подклассов, ByteArrayInputStream для чтения байтов String. Теперь у нас есть InputStream играющий роль фактического ввода, что мы можем легко проверить, сравнив его с экземпляром string

В Java есть множество классов для работы с байтовыми потоками, и здесь нет недостатка в вариантах и подходах. Мы сосредоточимся на некоторых из них:

InputStream в String с InputStream.readAllBytes ()

Поскольку Java 9, этот процесс был упрощен много. InputStream очень часто создается как ByteArrayInputStream перед toByteArray() для извлечения из него байтов.

Этот процесс упрощен и заменен встроенным InputStream.readAllBytes() , который просто возвращает байты из InputStream — столь необходимого служебного метода.

Класс String принимает byte в свой конструктор, из которого String , что делает этот подход наиболее простым и читаемым для преобразования InputStream в String :

 String result = new String(inputStream.readAllBytes()); System.out.println(result); 
 Input data, to be converted into an InputStream. 

Примечание. Если InputStream содержит больше Integer.MAX_VALUE , метод естественным образом вызывает OutOfMemoryError .

Читайте также:  Размеры шрифтов

InputStream в String с ByteArrayOutputStream

Для версий до Java 9 самый быстрый способ преобразовать InputStream в String — использовать ByteArrayOutputStream .

Этот подход основан на том факте, что мы можем легко создавать строки из байтовых массивов , и на том факте, что ByteArrayOutputStream имеет очень удобный метод toString()

Этот процесс практически противоположен тому, что мы делали в начале — построению InputStream из String:

 // Instantiate an OutputStream that'll store the data from the InputStream ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); // For each line of the InputStream, write it to the OutputStream, and move to the next for (int data = inputStream.read(); data != -1; data = inputStream.read()) < byteArrayOutputStream.write(data); >// Convert byte array into String // Optional: You can set a character set via `StandardCharsets` here String result = byteArrayOutputStream.toString(StandardCharsets.UTF_8); System.out.println(result); 

Метод inputStream.read() считывает следующий байт в массиве, начиная с первого. Здесь мы сохраняем ссылку на первый байт как data этой операции чтения, проверяем, -1 (дошел до конца потока) и переходим к следующему байту с помощью другой операции read()

Выполнение этого кода приводит к:

 Input data, to be converted into an InputStream. 

InputStream в String с InputStreamReader

InputStream и OutputStream являются частью java.io , который также включает действительно удобный InputStreamReader , изначально предназначенный как класс для чтения InputStream s.

InputStreamReader считывает байты из потока и декодирует их в символы, для которых вы также можете указать с помощью перечисления StandardCharsets

 // Read the InputStream into a Reader Reader reader = new InputStreamReader(inputStream); // Instantiate a StringBuilder to save the result StringBuilder result = new StringBuilder(); // Read each byte and convert into a char, adding to the StringBuilder for (int data = reader.read(); data != -1; data = reader.read()) < result.append((char)data); >// Convert StringBuilder to String System.out.println(result.toString()); 
 Input data, to be converted into an InputStream. 

InputStream в String с BufferedReader

Вместо Reader вы также можете использовать BufferedReader . BufferedReader сохраняет большие объемы байтов в буфере перед выполнением любых операций чтения / записи. Из-за меньшего количества переключений контекста это более эффективный способ чтения и записи больших объемов данных, в то время как при меньших объемах разница незаметна.

В предыдущем примере мы могли бы вместо этого InputStreamReader в BufferedReader

 BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream)); StringBuilder sb = new StringBuilder(); for (int data = reader.read(); data != -1; data = reader.read()) < sb.append((char)data); >System.out.println(sb.toString()); 

Это приводит к тому же результату:

 Input data, to be converted into an InputStream. 

Примечание: этот подход предпочтительнее предыдущего из-за повышенной эффективности, даже если он может быть незаметен на меньших объемах данных.

InputStream в String с помощью BufferedReader.lines ()

В Java 8 класс BufferedReader lines() , который возвращает Stream of String для каждой строки. Это делает его легким , чтобы прочитать InputStream , используя API поток:

 BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream)); String result = reader.lines().collect(Collectors.joining(System.lineSeparator())); System.out.println(result); 

Метод Collectors.joining() может работать без указания разделителя, однако он может привести к неожиданным результатам, если во входных данных есть новые строки. Устанавливая разделитель на System.lineSeparator() , мы позволяем базовому механизму системы задействовать концы строк.

 Input data, to be converted into an InputStream. 

InputStream в String с помощью Apache Commons

Наконец, давайте посмотрим, как добиться этого с помощью внешней библиотеки — Apache Commons, которая присутствует в значительном количестве проектов.

Читайте также:  Http e kipu rc ru login forgot password php

Чтобы использовать Apache Commons, нам нужно добавить его зависимость в наш собственный проект:

И после этого мы можем использовать его класс IOUtils

 String result = IOUtils.toString(inputStream); System.out.println(result); 

Метод также принимает необязательное перечисление StandardCharsets

 String result = IOUtils.toString(inputStream, StandardCharsets.UTF_8); 

Выполнение этого кода приводит к:

 Input data, to be converted into an InputStream. 

Заключение

В этом руководстве мы рассмотрели, как преобразовать InputStream в String в Java.

Мы рассмотрели новейший подход, прочитав все байты и построив String напрямую, а также записав их в ByteArrayOutputStream перед использованием Reader и BufferedReader и, наконец, завершив его использованием IOUtils Apache Commons.

Licensed under CC BY-NC-SA 4.0

Источник

Convert Java Stream to String

On this page we will learn how to convert Java Stream to String. To convert stream into string, we can use following methods.
1. Collectors.joining
2. Stream.reduce
Now let us discuss them using examples.

Contents

Using Collectors.joining

The Collectors.joining returns a Collector that concatenates the input elements, separated by the specified delimiter, in encounter order.

public static Collector joining(CharSequence delimiter)

The Collector is passed as argument to collect method that performs a mutable reduction operation on the elements using a Collector .

 R collect(Collector collector)
package com.concretepage; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; import java.util.stream.Stream; public class UsingJoining < public static void main(String[] args) < //example 1 String s1 = Stream.of("A", "B", "C", "D").collect(Collectors.joining()); System.out.println(s1); //example 2 Listlist = new ArrayList<>(); list.add("Gauri"); list.add("Lakshmi"); list.add("Saraswati"); String s2 = list.stream().collect(Collectors.joining(",")); System.out.println(s2); //example 3 List cityList = Arrays.asList(new City(1, "Varanasi"), new City(2, "Prayag"), new City(3, "Ayodhya")); String s3 = cityList.stream() .map(c -> c.getName()) .collect(Collectors.joining("|")); System.out.println(s3); //example 4 String s4 = cityList.stream() .map(c -> new StringBuffer(c.getName()).append("-").append(c.getId())) .collect(Collectors.joining("|")); System.out.println(s4); > > class City < private int id; private String name; public City(int id, String name) < this.id = id; this.name = name; >//Sets and Gets >
ABCD Gauri,Lakshmi,Saraswati Varanasi|Prayag|Ayodhya Varanasi-1|Prayag-2|Ayodhya-3

Using Stream.reduce

The Stream.reduce performs a reduction on the elements of this stream, using an associative accumulation function and returns Optional .

Optional reduce(BinaryOperator accumulator)
package com.concretepage; import java.util.ArrayList; import java.util.List; import java.util.stream.Stream; public class UsingReduce < public static void main(String[] args) < //example 1 String s1 = Stream.of(1, 2, 3, 4).map(e ->e.toString()).reduce("", String::concat); System.out.println(s1); //example 2 List list = new ArrayList<>(); list.add("Gauri"); list.add("Lakshmi"); list.add("Saraswati"); String s2 = list.stream(). reduce((x, y) -> new StringBuffer(x).append("-").append(y).toString()).get(); System.out.println(s2); //example 3 String s3 = Stream.of(new City(1, "Varanasi"), new City(2, "Prayag"), new City(3, "Ayodhya")) .map(c -> c.getName()) .reduce((x, y) -> new StringBuffer(x).append("-").append(y).toString()).get(); System.out.println(s3); > >
1234 Gauri-Lakshmi-Saraswati Varanasi-Prayag-Ayodhya

Источник

How to convert InputStream to String in Java

This article shows a few ways to convert an java.io.InputStream to a String .

What are modified line breaks?
Some InputStream to String conversions (#4 and #5) will modify the original line breaks, which converts the original line breaks to the system property line.separator – which is \r\n on Windows, \n on Linux.

Читайте также:  Latest java release version

1. ByteArrayOutputStream

Note
This ByteArrayOutputStream solution is the fastest way to convert InputStream to String , less conversion, support input streams with large amounts of data, keep the original line breaks, and it works in all Java versions.

This example opens a website google.com as an InputStream , and we use ByteArrayOutputStream to convert the InputStream to a String and print it out.

 package com.mkyong.string; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; import java.net.URI; public class ConvertInputStreamToString < 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()) < // Convert 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()); return result.toString("UTF-8"); // Java 10 //return result.toString(StandardCharsets.UTF_8); > > 

2. InputStream#readAllBytes (Java 9)

2.1 In Java 9, we can use the new InputStream#readAllBytes() API to convert the input stream to bytes, later we use the new String() to create a new String object.

 // @Java 9 -> inputStream.readAllBytes() // max bytes Integer.MAX_VALUE, 2147483647, which is 2G private static String convertInputStreamToString(InputStream inputStream) throws IOException

2.2 Review the InputStream source code; it reads all bytes into a byte array , which has a limit of Integer.MAX_VALUE or 2G; Since then, it is not intended for reading input streams with large amounts of data.

 package java.io; public abstract class InputStream implements Closeable < public byte[] readAllBytes() throws IOException < return readNBytes(Integer.MAX_VALUE); >//. > 

3. InputStreamReader + StringBuilder

The Reader read a char at a time, slow.

 // InputStreamReader + StringBuilder 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. InputStreamReader + BufferedReader (modified line breaks)

The common practice is wrapping the Reader with a BufferedReader .

 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. Java 8 BufferedReader#lines (modified line breaks)

Java 8 added a new lines API to the BufferedReader class to convert all lines into a Stream .

 private static String convertInputStreamToString4(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; > 

6. Apache Commons IO

If you have the commons-io library in the project, try the IOUtils.toString() to convert InputStream to String .

 private static String convertInputStreamToString(InputStream inputStream) throws IOException

Review the IOUtils.toString source code, the IOUtils class copy the InputStream into a StringWriter .

 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(); >> //. > 

Источник

Оцените статью