In this post, you will learn to convert InputStream to a String in 5 different ways.
We use the InputStream class to read some data from a file. Data will be transformed into an ordered stream of bytes.
You might also be interested in learning how to read a file in Java.
As it was mentioned earlier, there are many ways to convert InputStream to a String in Java. Here, we will cover the following ways:
- Using the Scanner class
- With the InputStream.readAllBytes() method
- Using the StringBuilder class together with InputStreamReader
- With the IOUtils.toString() method
- Using the CharStreams class
1. Convert InputStream into a String Using the Scanner class
The first way is to use the standard Scanner class.
import java.io.ByteArrayInputStream; import java.io.InputStream; import java.util.*; class ConvertInputStreamToString { public static void main(String[] args) { String resultString; String str = "Some String"; // create InputStream using the bytes from the above String InputStream inputStream = new ByteArrayInputStream(str.getBytes()); // Convert data from InputStream into a new String try (Scanner scanner = new Scanner(inputStream).useDelimiter("\\A")) { resultString = scanner.hasNext() ? scanner.next() : ""; } System.out.println(resultString); } }
2. Using the InputStream.readAllBytes() method
We can use the readAllBytes() method of the InputStream class. This method got introduced in Java 9.
import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.InputStream; import java.nio.charset.StandardCharsets; class ConvertInputStreamToString { /** * This method shows how to convert InputStream to a String using an array of bytes and specifying the charset. */ public static void main(String[] args) throws IOException { String str = "Some String"; InputStream inputStream = new ByteArrayInputStream(str.getBytes()); byte[] byteArray = inputStream.readAllBytes(); // Convert data from byteArray into a new String String resultString = new String(byteArray, StandardCharsets.UTF_8); System.out.println(resultString); } }
3. Parse InputStream to a String using the StringBuilder
The StringBuilder class can be used for converting the InputStream into a String. We also need to use the InputStreamReader class to create a Reader object.
import java.io.*; import java.nio.charset.StandardCharsets; class ConvertInputStreamToString { public static void main(String[] args) throws IOException { int bufferSize = 1024; char[] buffer = new char[bufferSize]; String str = "Some String"; InputStream inputStream = new ByteArrayInputStream(str.getBytes()); StringBuilder strBuilder = new StringBuilder(); try (Reader in = new InputStreamReader(inputStream, StandardCharsets.UTF_8)) { for (int numRead; (numRead = in.read(buffer, 0, buffer.length)) > 0; ) { strBuilder.append(buffer, 0, numRead); } } System.out.println(strBuilder.toString()); } }
4. Using the IOUtils.toString() method
The IOUtils class belongs to the Apache Commons library. We need to add the following Maven dependency to the pom.xml:
<dependency> <groupid>commons-io</groupid> <artifactid>commons-io</artifactid> <version>2.11.0</version> </dependency>
Example
import java.io.*; import java.nio.charset.StandardCharsets; import org.apache.commons.io.IOUtils; class ConvertInputStreamToString { public static void main(String[] args) throws IOException { String str = "Some String"; InputStream inputStream = new ByteArrayInputStream(str.getBytes()); String resultString = IOUtils.toString(inputStream, StandardCharsets.UTF_8); System.out.println(resultString); } }
5. Using the CharStreams class
The CharStreams class belongs to the Guava library. It has a toString() method that we can use to parse InputStream to a String.
To be able to use it, we need to add the following Maven dependency:
<dependency> <groupid>com.google.guava</groupid> <artifactid>guava</artifactid> <version>31.0.1-jre</version> </dependency>
Example
import com.google.common.io.CharStreams; import org.apache.commons.io.Charsets; import java.io.*; class ConvertInputStreamToString { public static void main(String[] args) throws IOException { String str = "Some String"; InputStream inputStream = new ByteArrayInputStream(str.getBytes()); String resultString = CharStreams.toString(new InputStreamReader(inputStream, Charsets.UTF_8)); System.out.println(resultString); } }