Read text from InputStream
本问题已经有最佳答案,请猛点这里访问。
如果我从java.io.inputstream开始,那么将整个流读取到字符串中最简单的方法是什么(假设是utf-8)?
这应该很容易,但我主要是一个C人和谷歌是失败的我在这方面。谢谢。
取决于什么许可证你是舒适的一个,它的一个IO库共用衬套雅加达。
做指定的字符编码。不要浪费和错误代码,或执行一个
这里是一个例子。你可以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() } } |