从InputStream中读取文本

时间:2009-12-11 23:47:49

标签: java

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

这应该很容易,但我主要是一个C#人,谷歌让我失望了。感谢。

5 个答案:

答案 0 :(得分:19)

根据您熟悉的许可证,它是带有Jakarta-Commons IO库的one liner

答案 1 :(得分:10)

执行指定字符编码。 不要浪费代码,引入错误,并使用BufferedReader减慢执行速度。

这是一个例子。您可以使用缓冲区大小,编码等对其进行参数化。

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();
}

答案 2 :(得分:1)

在Java中读取/写入流程非常痛苦。

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()
    }

}

答案 3 :(得分:1)

使用Commons-IO可能是最好的选择。 为了您的兴趣,另一种方法是复制所有字节,然后将其转换为字符串。

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);
}

答案 4 :(得分:1)

我在Java 8中找到了一个很好的方法:

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

如上所述,您可以使用新的InputStreamReader(是“UTF-8”)交换新的InputStreamReader(is),但我没有使用此构造函数的经验。