如果您有一个java.io.InputStream对象,您应该如何处理该对象并生成一个String?
java.io.InputStream
String
假设我有一个InputStream包含文本数据的 ,并且我想将它转换为String,因此例如我可以将其写入日志文件。
InputStream
将 theInputStream转换为 a的最简单方法是String什么?
public String convertStreamToString(InputStream is) { // ??? }
一个很好的方法是使用Apache commons IOUtils将其复制InputStream到StringWriter......类似
IOUtils
StringWriter
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 ,则可以使用
ByteArrayOutputStream
这是一种仅使用标准 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”)。
Scanner