如果我有一个java.io.InputStream,想要将整个流读取到一个字符串中(假设使用utf-8编码),最简单的方法是什么?
这应该很容易,但我主要是C#开发人员,而且谷歌上也没有找到相关方法。谢谢。
如果我有一个java.io.InputStream,想要将整个流读取到一个字符串中(假设使用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();
}
int n; while((n = r.read(buf)) >= 0) { s.append(buf, 0, n); }
。 - Stephen Cpublic static String readString(InputStream is) {
BufferedReader br = new BufferedReader(new InputStreamReader(is));
String content = br.lines().reduce("", String::concat);
return content;
}
br.lines().reduce("\n", String::concat)
? - thug-gamer在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()
}
}
使用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);
}