4 回答

TA貢獻(xiàn)1911條經(jīng)驗(yàn) 獲得超7個(gè)贊
一個(gè)很好的方法是使用Apache公共資源 IOUtils
將其復(fù)制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貢獻(xiàn)1790條經(jīng)驗(yàn) 獲得超9個(gè)贊
這是一種僅使用標(biāo)準(zhǔn)Java庫的方法(請注意,流未關(guān)閉,您的里程可能會有所不同)。
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”文章中學(xué)到了這個(gè)技巧。它工作的原因是因?yàn)?a >Scanner迭代流中的標(biāo)記,在這種情況下我們使用“輸入邊界的開頭”(\ A)分隔標(biāo)記,因此只為流的整個(gè)內(nèi)容提供一個(gè)標(biāo)記。
注意,如果您需要具體了解輸入流的編碼,可以為Scanner
構(gòu)造函數(shù)提供第二個(gè)參數(shù),指示要使用的字符集(例如“UTF-8”)。
帽子小貼士也向Jacob說道,他曾經(jīng)指著我說過這篇文章。

TA貢獻(xiàn)1887條經(jīng)驗(yàn) 獲得超5個(gè)贊
Apache Commons允許:
String myString = IOUtils.toString(myInputStream, "UTF-8");
當(dāng)然,您可以選擇除UTF-8之外的其他字符編碼。
另見:( 文件)
添加回答
舉報(bào)