从InputStream中读取文本
如果我从java.io.InputStream开始,那么将整个流读入String(假设为utf-8)的最简单方法是什么?
这应该很容易,但我主要是一个C#人,谷歌在这方面让我失望。 谢谢。
根据您熟悉的许可证,它是与Jakarta-Commons IO库一起使用的。
请指定字符编码。 不要浪费代码,引入错误,并使用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(); }
使用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); }
在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() } }
我在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),但我没有使用此构造函数的经验。
- 连接超时。 为什么?
- 如何在sqlite中添加数据库中的第二个表?
- 如何为edittext实现一个简单的语法高亮方法?
- 使用JSON将String与今天的日期匹配
- 日志消息中的美元符号($)的含义
- Android线程/处理程序错误IllegalStateException:尚未发布指定的消息队列同步障碍标记
- 说“Java Modified UTF-8 Encoding”是什么意思?
- Android应用程序在运行时崩溃:’java.lang.String android.content.Context.getPackageName()’
- Gson.toString()给出错误“IllegalArgumentException:多个名为mPaint的JSON字段”