如何在Java中读取/转换InputStream为String?如果你有一个java.io.InputStream对象,你应该如何处理该对象并产生一个String?假设我有一个InputStream包含文本数据,并且我想将其转换为a String,所以例如我可以将其写入日志文件。采取InputStream并将其转换为最简单的方法是String什么?public String convertStreamToString(InputStream is) {
// ???}
4 回答
Smart猫小萌
TA贡献1911条经验 获得超7个赞
一个很好的方法是使用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 ,则可以使用
富国沪深
TA贡献1790条经验 获得超9个赞
这是一种仅使用标准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
TA贡献1887条经验 获得超5个赞
Apache Commons允许:
String myString = IOUtils.toString(myInputStream, "UTF-8");
当然,您可以选择除UTF-8之外的其他字符编码。
另见:( 文件)
添加回答
举报
0/150
提交
取消