如何在 Java 中将 InputStream 转换为 String

By | 2024年12月12日

如何在 Java 中将 InputStream 转换为 String

问题描述

在 Java 开发中,常常需要将包含文本数据的 InputStream 转换为 String 类型,以便进行后续处理,例如写入日志文件。

问题说明

将 InputStream 转换为 String 的需求很常见,但由于 InputStream 是字节流,而 String 是字符序列,因此需要进行适当的转换。不同的库和方法提供了多种解决方案。

解决方案

有多种将 InputStream 转换为 String 的方法,包括:

  1. 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);
  2. 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));
  3. Java 标准库
    使用 Scanner 类:

    import java.util.Scanner;
    import java.io.InputStream;
    
    InputStream inputStream = ...;
    String result = new Scanner(inputStream, "UTF-8").useDelimiter("\\A").next();

    使用 BufferedReaderStringBuilder 类:

    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();
  4. Java 8 Stream API
    使用 BufferedReaderlines() 方法:

    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"));
  5. Java 9
    使用 InputStream.readAllBytes() 方法:

    import java.io.InputStream;
    import java.nio.charset.StandardCharsets;
    
    InputStream inputStream = ...;
    String result = new String(inputStream.readAllBytes(), StandardCharsets.UTF_8);