如何在 Java 中将 InputStream 转换为 String
问题描述
在 Java 开发中,常常需要将包含文本数据的 InputStream 转换为 String 类型,以便进行后续处理,例如写入日志文件。
问题说明
将 InputStream 转换为 String 的需求很常见,但由于 InputStream 是字节流,而 String 是字符序列,因此需要进行适当的转换。不同的库和方法提供了多种解决方案。
解决方案
有多种将 InputStream 转换为 String 的方法,包括:
-
Apache Commons IO 库:
使用IOUtils.toString()
方法:import org.apache.commons.io.IOUtils; import java.io.InputStream; import java.nio.charset.StandardCharsets; InputStream inputStream = ...; String result = IOUtils.toString(inputStream, StandardCharsets.UTF_8);
-
Guava 库:
使用CharStreams.toString()
方法:import com.google.common.io.CharStreams; import java.io.InputStream; import java.io.InputStreamReader; import java.nio.charset.StandardCharsets; InputStream inputStream = ...; String result = CharStreams.toString(new InputStreamReader(inputStream, StandardCharsets.UTF_8));
-
Java 标准库:
使用Scanner
类:import java.util.Scanner; import java.io.InputStream; InputStream inputStream = ...; String result = new Scanner(inputStream, "UTF-8").useDelimiter("\\A").next();
使用
BufferedReader
和StringBuilder
类:import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; import java.nio.charset.StandardCharsets; InputStream inputStream = ...; BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream, StandardCharsets.UTF_8)); StringBuilder stringBuilder = new StringBuilder(); String line; while ((line = reader.readLine()) != null) { stringBuilder.append(line); } String result = stringBuilder.toString();
-
Java 8 Stream API:
使用BufferedReader
和lines()
方法:import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; import java.nio.charset.StandardCharsets; import java.util.stream.Collectors; InputStream inputStream = ...; String result = new BufferedReader(new InputStreamReader(inputStream, StandardCharsets.UTF_8)) .lines().collect(Collectors.joining("\n"));
-
Java 9:
使用InputStream.readAllBytes()
方法:import java.io.InputStream; import java.nio.charset.StandardCharsets; InputStream inputStream = ...; String result = new String(inputStream.readAllBytes(), StandardCharsets.UTF_8);