第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Android從輸入流中高效讀取

Android從輸入流中高效讀取

互換的青春 2019-12-12 13:41:48
我正在向正在制作的android應(yīng)用程序的網(wǎng)站發(fā)出HTTP get請求。我正在使用DefaultHttpClient并使用HttpGet發(fā)出請求。我得到實體響應(yīng),并從中獲得一個InputStream對象,以獲取頁面的html。然后,我循環(huán)遍歷以下內(nèi)容:BufferedReader r = new BufferedReader(new InputStreamReader(inputStream));String x = "";x = r.readLine();String total = "";while(x!= null){total += x;x = r.readLine();}但是,這太慢了。這效率低下嗎?我沒有加載較大的網(wǎng)頁-www.cokezone.co.uk,因此文件大小不大。有一個更好的方法嗎?
查看完整描述

3 回答

?
藍(lán)山帝景

TA貢獻(xiàn)1843條經(jīng)驗 獲得超7個贊

您的代碼中的問題在于,它正在創(chuàng)建許多重的String對象,復(fù)制它們的內(nèi)容并對其執(zhí)行操作。相反,應(yīng)該使用StringBuilder以避免String在每個追加上創(chuàng)建新對象,并避免復(fù)制char數(shù)組。您的案例的實現(xiàn)將如下所示:


BufferedReader r = new BufferedReader(new InputStreamReader(inputStream));

StringBuilder total = new StringBuilder();

for (String line; (line = r.readLine()) != null; ) {

    total.append(line).append('\n');

}

現(xiàn)在,您total無需將其轉(zhuǎn)換為即可使用String,但是如果您需要將結(jié)果作為String,只需添加:


字符串結(jié)果= total.toString();


我會盡力解釋一下...


a += b(或a = a + b),其中a和b都是字符串,副本的內(nèi)容都 a 和 b一個新的對象(注意,你還復(fù)制a,它包含累積 String),和你正在做的每一次迭代的拷貝。

a.append(b),其中a是StringBuilder,直接將b內(nèi)容附加到a,因此您不必在每次迭代時都復(fù)制累積的字符串。


查看完整回答
反對 回復(fù) 2019-12-12
  • 3 回答
  • 0 關(guān)注
  • 625 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號