假設我有一個InputStream
包含文本數據,我想將其轉換爲String
(例如,以便我可以將流的內容寫入日誌文件)。如何將InputStream轉換爲Java中的字符串?
將InputStream
轉換爲String
的最簡單方法是什麼?
public String convertStreamToString(InputStream is) {
// ???
}
假設我有一個InputStream
包含文本數據,我想將其轉換爲String
(例如,以便我可以將流的內容寫入日誌文件)。如何將InputStream轉換爲Java中的字符串?
將InputStream
轉換爲String
的最簡單方法是什麼?
public String convertStreamToString(InputStream is) {
// ???
}
這是我的版本,
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
}
可以使用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。我在這裏發表評論和批評。
請記住,您正在使用的BufferedReader構造函數假定平臺對來自InputStream的字節進行了默認文本編碼,這可能是錯誤的。您必須知道編碼並在Reader構造函數中指定它。 – 2009-11-19 14:51:43
通過使用此構造函數,您可以告訴InputStreamReader使用默認的平臺編碼,應該避免這種情況。您應該指定數據編碼的字符集,以便使用其他三種構造函數之一正確解碼。 – Sylar 2009-11-19 14:54:34
使用BufferedReader在換行符上分割輸入也是不必要的,只是爲了將換行符手動添加到StringBuilder,並且幾乎是一個WTF來實際使用StringBuilder來防止創建String對象,但是隨後調用append(line +「 \ n「)而不是append(line).append(」\ n「)。關閉InputStream也不是特別聰明。 – jarnbjo 2009-11-19 15:49:07
如果你想簡單可靠地做到這一點,我建議使用Apache Jakarta Commons IO庫IOUtils.toString(java.io.InputStream, java.lang.String)
的方法。
這是一條簡短又甜美的道路。 – 2009-11-19 15:20:29
唯一的缺點就是你需要在這個庫中使用外部依賴,這可能並不總是需要的。 – 2009-11-19 16:20:21
您*需要*指定編碼,否則它將使用平臺默認值,這是任何可靠的。 – 2011-03-10 15:25:06
String text = new Scanner(inputStream).useDelimiter("\\A").next();
更here
* BEST *答案。 – 2013-06-14 15:42:59
的可能重複[在Java中如何做到讀取到一個字符串輸入流?](HTTP://計算器。 com/questions/309424/in-java-how-do-a-read-an-input-stream-in-to-a-string) – 2010-08-13 18:24:20
同意。我已投票決定將其作爲重複關閉並編輯另一個問題,以包含來自此處的一些標題關鍵字和問題文本。 – 2010-08-17 09:26:46