如何在Java中读取/转换InputStream为String?

如何在Java中读取/转换InputStream为String?

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


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

采取InputStream并将其转换为最简单的方法是String什么?

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


达令说
浏览 1126回答 4
4回答

Smart猫小萌

一个很好的方法是使用Apache公共资源 IOUtils将其复制InputStream到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 thatString theString = IOUtils.toString(inputStream, encoding);或者,ByteArrayOutputStream如果您不想混合Streams和Writers ,则可以使用

富国沪深

这是一种仅使用标准Java库的方法(请注意,流未关闭,您的里程可能会有所不同)。static String convertStreamToString(java.io.InputStream is) {     java.util.Scanner s = new java.util.Scanner(is).useDelimiter("\\A");     return s.hasNext() ? s.next() : "";}我从“Stupid Scanner tricks”文章中学到了这个技巧。它工作的原因是因为Scanner迭代流中的标记,在这种情况下我们使用“输入边界的开头”(\ A)分隔标记,因此只为流的整个内容提供一个标记。注意,如果您需要具体了解输入流的编码,可以为Scanner构造函数提供第二个参数,指示要使用的字符集(例如“UTF-8”)。帽子小贴士也向Jacob说道,他曾经指着我说过这篇文章。

慕工程0101907

Apache Commons允许:String myString = IOUtils.toString(myInputStream, "UTF-8");当然,您可以选择除UTF-8之外的其他字符编码。另见:( 文件)
打开App,查看更多内容
随时随地看视频慕课网APP