如何在Java中讀取/轉換InputStream為String?如果你有一個java.io.InputStream對象,你應該如何處理該對象并產生一個String?假設我有一個InputStream包含文本數據,并且我想將其轉換為a String,所以例如我可以將其寫入日志文件。采取InputStream并將其轉換為最簡單的方法是String什么?public String convertStreamToString(InputStream is) {
// ???}
4 回答

Smart貓小萌
TA貢獻1911條經驗 獲得超7個贊
一個很好的方法是使用Apache公共資源 IOUtils
將其復制InputStream
到StringWriter
...類似的東西
StringWriter writer = new StringWriter();IOUtils.copy(inputStream, writer, encoding);String theString = writer.toString();
甚至
// NB: does not close inputStream, you'll have to use try-with-resources for thatString theString = IOUtils.toString(inputStream, encoding);
或者,ByteArrayOutputStream
如果您不想混合Streams和Writers ,則可以使用

富國滬深
TA貢獻1790條經驗 獲得超9個贊
這是一種僅使用標準Java庫的方法(請注意,流未關閉,您的里程可能會有所不同)。
static String convertStreamToString(java.io.InputStream is) { java.util.Scanner s = new java.util.Scanner(is).useDelimiter("\\A"); return s.hasNext() ? s.next() : "";}
我從“Stupid Scanner tricks”文章中學到了這個技巧。它工作的原因是因為Scanner迭代流中的標記,在這種情況下我們使用“輸入邊界的開頭”(\ A)分隔標記,因此只為流的整個內容提供一個標記。
注意,如果您需要具體了解輸入流的編碼,可以為Scanner
構造函數提供第二個參數,指示要使用的字符集(例如“UTF-8”)。
帽子小貼士也向Jacob說道,他曾經指著我說過這篇文章。

慕工程0101907
TA貢獻1887條經驗 獲得超5個贊
Apache Commons允許:
String myString = IOUtils.toString(myInputStream, "UTF-8");
當然,您可以選擇除UTF-8之外的其他字符編碼。
另見:( 文件)
添加回答
舉報
0/150
提交
取消