关于Java:从输入流读取文本

Read text from InputStream

本问题已经有最佳答案,请猛点这里访问。

如果我从java.io.inputstream开始,那么将整个流读取到字符串中最简单的方法是什么(假设是utf-8)?

这应该很容易,但我主要是一个C人和谷歌是失败的我在这方面。谢谢。


取决于什么许可证你是舒适的一个,它的一个IO库共用衬套雅加达。


做指定的字符编码。不要浪费和错误代码,或执行一个BufferedReader,慢。

这里是一个例子。你可以parameterize一个缓冲区的大小,编码等。

1
2
3
4
5
6
7
8
9
10
11
12
static String readString(InputStream is) throws IOException {
  char[] buf = new char[2048];
  Reader r = new InputStreamReader(is,"UTF-8");
  StringBuilder s = new StringBuilder();
  while (true) {
    int n = r.read(buf);
    if (n < 0)
      break;
    s.append(buf, 0, n);
  }
  return s.toString();
}


我发现一个好方式8:Java中的流

1
2
3
4
5
public static String readString(InputStream is) {
    BufferedReader br = new BufferedReader(new InputStreamReader(is));
    String content = br.lines().reduce("", String::concat);
    return content;
}

作为交换,你可以在上面inputstreamreader(是)一个新inputstreamreader(是"UTF-8"),但我没有体验与此构造函数。


使用Commons IO可能会是最好的选择。为您的利益,另一个方法是复制所有的字节,然后转换成一个字符串的信息。

1
2
3
4
5
6
7
public static String readText(InputStream is, String charset) throws IOException {
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    byte[] bytes = new byte[4096];
    for(int len;(len = is.read(bytes))>0;)
        baos.write(bytes, 0, len);
    return new String(baos.toByteArray(), charset);
}

阅读/写作是痛苦的remarkably从Java中的流。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public static String getStreamContents(InputStream stream) throws IOException {

    StringBuilder content = new StringBuilder()

    Reader reader = new BufferedReader(new InputStreamReader(stream,"UTF-8"))
    String lineSeparator = System.getProperty("line.separator");

    try {
        String line
        while ((line = reader.readLine()) != null) {
            content.append(line + lineSeparator)
        }
        return content.toString()

    } finally {
        reader.close()
    }

}