假设我有一个InputStream
包含文本数据的,并且我想将它转换为一个String
(例如,我可以将流的内容写入日志文件)。
InputStream
获取并将其转换为 的最简单方法是String
什么?
public String convertStreamToString(InputStream is) {
// ???
}
假设我有一个InputStream
包含文本数据的,并且我想将它转换为一个String
(例如,我可以将流的内容写入日志文件)。
InputStream
获取并将其转换为 的最简单方法是String
什么?
public String convertStreamToString(InputStream is) {
// ???
}
如果你想简单可靠地做到这一点,我建议使用Apache Jakarta Commons IO 库IOUtils.toString(java.io.InputStream, java.lang.String)
方法。
这是我的版本
public static String readString(InputStream inputStream) throws IOException {
ByteArrayOutputStream into = new ByteArrayOutputStream();
byte[] buf = new byte[4096];
for (int n; 0 < (n = inputStream.read(buf));) {
into.write(buf, 0, n);
}
into.close();
return new String(into.toByteArray(), "UTF-8"); // Or whatever encoding
}
String text = new Scanner(inputStream).useDelimiter("\\A").next();
唯一棘手的是要记住
\A
匹配输入开头的正则表达式。这有效地告诉Scanner
标记整个流,从开始到(不合逻辑的)下一个开始......
- 来自Oracle 博客
由于 Java 9 InputStream.readAllBytes()更短:
String toString(InputStream inputStream) throws IOException {
return new String(inputStream.readAllBytes(), StandardCharsets.UTF_8); // Or whatever encoding
}
注意:本例中没有关闭InputStream 。
您可以使用 a在循环BufferedReader
中将流读入 a StringBuilder
,然后从 中获取完整内容StringBuilder
:
public String convertStreamToString(InputStream is) {
BufferedReader reader = new BufferedReader(new InputStreamReader(is));
StringBuilder sb = new StringBuilder();
String line = null;
try {
while ((line = reader.readLine()) != null) {
sb.append(line + "\n");
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return sb.toString();
}
全面披露:这是我在KodeJava.org上找到的解决方案。我在这里发布它以征求意见和批评。
一个很好的方法是使用Apache commons IOUtils
IOUtils.toString(inputStream, string);