关于stream:如何在Java中将InputStream转换为String?

How do I convert an InputStream to a String in Java?

假设我有一个包含文本数据的InputStream,我想将其转换为String(例如,这样我就可以将流的内容写入日志文件)。

InputStream转换成String最简单的方法是什么?

1
2
3
public String convertStreamToString(InputStream is) {
    // ???
}


如果您想简单可靠地完成这项工作,我建议使用ApacheJakartaCommons IO库IOUtils.toString(java.io.InputStream, java.lang.String)方法。


这是我的版本,

1
2
3
4
5
6
7
8
9
10
public static String readString(InputStream inputStream) throws IOException {

    ByteArrayOutputStream into = new ByteArrayOutputStream();
    byte[] buf = new byte[4096];
    for (int n; 0 < (n = inputStream.read(buf));) {
        into.write(buf, 0, n);
    }
    into.close();
    return new String(into.toByteArray(),"UTF-8"); // Or whatever encoding
}


1
String text = new Scanner( inputStream).useDelimiter("\\A").next();

这里更多


您可以使用BufferedReader在循环中将流读取到StringBuilder中,然后从StringBuilder中获取全部内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public String convertStreamToString(InputStream is) {
  BufferedReader reader = new BufferedReader(new InputStreamReader(is));
  StringBuilder sb = new StringBuilder();

  String line = null;

  try {
    while ((line = reader.readLine()) != null) {
    sb.append(line +"
"
);
    }
  } catch (IOException e) {
    e.printStackTrace();
  } finally {
    try {
      is.close();
    } catch (IOException e) {
      e.printStackTrace();
    }
  }

  return sb.toString();
}

完全公开:这是我在kodejava.org上找到的解决方案。我在这里发表评论和评论。