2014-07-19 36 views
0

我正在使用以下代碼查詢REST API,但它非常慢。瀏覽器的響應時間以毫秒爲單位。我認爲API沒有問題。用於查詢REST API的Java代碼非常慢

任何人都可以請建議我應該做些什麼改變來優化它?感謝您的時間

HttpClient client = new DefaultHttpClient(); 
    HttpGet request = new HttpGet(URI); 

    HttpResponse response = client.execute(request); 
    BufferedReader rd = new BufferedReader (new InputStreamReader(response.getEntity().getContent())); 

    String line = ""; 
    StringBuilder outputLine=new StringBuilder(); 
    while ((line = rd.readLine()) != null) { 

     outputLine.append("\n"+line); 

    } 
    return (JSONObject)new JSONParser().parse(outputLine.toString()); 
+2

您是否嘗試將代碼行添加到代碼中的各個點以查明它是請求,讀取輸入流還是解析json需要這麼長時間? –

+0

什麼是「非常慢」?一毫秒?等一下?數據有多大? – maaartinus

+0

感謝戴夫提供了很好的建議。獲得約25秒的響應需要時間。 – Kapil

回答

0

我預計最大的延誤是在時間;

  • 才能得到答覆
  • 才能建立一個JSONObject的時間。

您可以加快如何複製文本如下,但它可能沒有太大的區別。

HttpResponse response = client.execute(request); 
char[] chars = new char[4096]; 
Reader rd = new InputStreamReader(response.getEntity().getContent()); 
StringWriter sw = new StringWriter(); 

for (int len; ((len = rd.read(chars)) > 0;) 
    sw.write(chars, 0, len); 

return (JSONObject)new JSONParser().parse(sw.toString()); 

這是更快的,因爲它複製到在時刻4 KB而不破壞文本行,並具有裝配其放回文本的一個塊。

+1

我同意你彼得彼得我認爲它需要時間才能得到答覆。我計算平均時間和約25秒不知道爲什麼。感謝幫助 – Kapil

0

你應該看看retrofitokhttp。藉助這些庫,您可以輕鬆地與其他API進行通信,並且還可以自動將身體解析爲json。