本文介紹了將IOUtils.toString與HttpEntity.getContent()結(jié)合使用的Java將InputStream轉(zhuǎn)換為空的處理方法,對(duì)大家解決問(wèn)題具有一定的參考價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧!
問(wèn)題描述
我有一種奇怪的感覺(jué)
我有一個(gè)HTTP響應(yīng),我嘗試將其轉(zhuǎn)換為字符串,問(wèn)題是第一次它工作,但第二次InputStream數(shù)據(jù)為空
而且我只有回復(fù)1的數(shù)據(jù)
InputStream is = entity.getContent();
String response1 = IOUtils.toString(is, "utf-8"); // Here every thing is fine
String respons2 = IOUtils.toString(is, "utf-8"); // Here the response2 is empty
and is (InputStream) holding no data
這里的問(wèn)題是我需要能夠在InputStream中保存數(shù)據(jù)以供將來(lái)在代碼中使用
推薦答案
您的需求不是很清楚,但是,在檢查javadochttpEntity.getContent時(shí),我看到了以下內(nèi)容:
返回實(shí)體的內(nèi)容流。可重復(fù)實(shí)體包括
希望為每次調(diào)用創(chuàng)建一個(gè)InputStream的新實(shí)例
并因此可以被多次使用。實(shí)體
不可重復(fù)的,則應(yīng)返回相同的InputStream
實(shí)例,因此不能多次使用。
您是否通過(guò)調(diào)用
來(lái)檢查HTTPEntity是否可重復(fù)
httpEntity.isRepeatable()
如果為T(mén)rue,您可以執(zhí)行以下操作:
InputStream is = entity.getContent();
String response1 = IOUtils.toString(is, "utf-8");
// retrieve a new instance of inputStream
is = entity.getContent();
String response2 = IOUtils.toString(is, "utf-8");
最后但并非最不重要的一點(diǎn)(因?yàn)槲也恢滥拇_切需求),如果實(shí)體能夠多次生成其數(shù)據(jù),則前面的代碼將有所幫助,但您應(yīng)該評(píng)估以下兩次之間的成本:
使用一次數(shù)據(jù)并將其保存在字符串中
多次使用數(shù)據(jù)
這篇關(guān)于將IOUtils.toString與HttpEntity.getContent()結(jié)合使用的Java將InputStream轉(zhuǎn)換為空的文章就介紹到這了,希望我們推薦的答案對(duì)大家有所幫助,