一尘不染

如何在 Java 中读取/将 InputStream 转换为字符串?

javascript

如果您有一个java.io.InputStream对象,您应该如何处理该对象并生成一个String?


假设我有一个InputStream包含文本数据的 ,并且我想将它转换为String,因此例如我可以将其写入日志文件。

将 theInputStream转换为 a的最简单方法是String什么?

public String convertStreamToString(InputStream is) {
    // ???
}

阅读 200

收藏
2022-01-08

共2个答案

一尘不染

一个很好的方法是使用Apache commons IOUtils将其复制InputStreamStringWriter......类似

StringWriter writer = new StringWriter();
IOUtils.copy(inputStream, writer, encoding);
String theString = writer.toString();

甚至

// NB: does not close inputStream, you'll have to use try-with-resources for that
String theString = IOUtils.toString(inputStream, encoding); 

或者,ByteArrayOutputStream如果您不想混合使用 Streams 和 Writers ,则可以使用

2022-01-08
一尘不染

这是一种仅使用标准 Java 库的方法(请注意,流未关闭,您的里程可能会有所不同)。

static String convertStreamToString(java.io.InputStream is) {
    java.util.Scanner s = new java.util.Scanner(is).useDelimiter("\\A");
    return s.hasNext() ? s.next() : "";
}

我从中学到了这个技巧。它工作的原因是因为Scanner迭代流中的标记,在这种情况下,我们使用“输入边界的开始”(\A)来分隔标记,因此我们只为流的整个内容提供一个标记。

请注意,如果您需要具体说明输入流的编码,您可以向Scanner构造函数提供第二个参数,指示要使用的字符集(例如“UTF-8”)。

2022-01-08