假设我有InputStream
包含文本数据,我想将其转换为String
(例如,我可以将流的内容写入日志文件)。 / p>
采用InputStream
并将其转换为String
的最简单方法是什么?
public String convertStreamToString(InputStream is) {
// ???
}
答案 0 :(得分:23)
如果您想简单可靠地执行此操作,建议您使用Apache Jakarta Commons IO库IOUtils.toString(java.io.InputStream, java.lang.String)
方法。
答案 1 :(得分:17)
这是我的版本,
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
}
答案 2 :(得分:4)
String text = new Scanner( inputStream).useDelimiter("\\A").next();
更多here
答案 3 :(得分:1)
您可以使用BufferedReader
将流读取到循环中的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上找到的解决方案。我在这里发表评论和评论。
答案 4 :(得分:1)
一种不错的方法是使用Apache commons IOUtils
IOUtils.toString(inputStream, string);
答案 5 :(得分:1)
使用Java 9+甚至更短的版本:
static String readString(InputStream inputStream) throws IOException {
return new String(inputStream.readAllBytes(), StandardCharsets.UTF_8); // Or whatever encoding
}
注意:在此示例中,未关闭InputStream。
答案 6 :(得分:0)
下面的代码可能会对您有所帮助。
public String convertBytestoString(InputStream inputStream)
{
int bytes;
byte[] buffer = new byte[1024];
bytes = inputStream.read(buffer);
String stringData = new String(buffer,0,bytes);
return stringData;
}