2014-06-13 20 views
0

我正在製作一個應用程序,該應用程序從以txt格式打印數據的網站讀取「實時」股票報價數據。有沒有更高效的方式從網絡上讀取數據?

  • 所有我關心的是最後一行
  • 我有一個計時器事件熄滅第二有史以來1/4的URL和讀取數據。
  • 現在這個過程大約需要10秒鐘,然後每次4秒鐘。
  • 我想知道/希望有更好的方式來從流中讀取和/或從網絡獲取數據。

這是我怎麼從網上

URL website = new URL("www.somesite.com/blah.php?csv_format=txt"); 
    isr = new InputStreamReader(website.openStream()); 

這是如何讀取數據

  • 我通過一整套從開始數據的讀取完成,直到我得到的數據到達結尾
  • 我將最後一行保存在某個變量中,並將該信息用於我的線圖。
  • 我停止使用readLine()並移動到使用字符數組來查看是否加快了速度。

這是我最近嘗試(試圖保持它簡單越好)

int n = 0; 
    while (n != -1) { 
     n = isr.read(buffer, 0, 8192); 
    } 
+0

你最後一次嘗試將打破有一天,因爲你可以結束一個不完整的最後一行(想象它開始在偏移8190)。使用兩個緩衝區可以做(只要該行不超過緩衝區長度)。 – maaartinus

+0

是的,我永遠不會真的這樣實現它,但我認爲這種方式可能是最快的,我所感興趣的是計時。在我使用兩個名爲buffer和lineBuffer的緩衝區之前。 – JDiGz

回答

0

這將是一個更容易使用HTTP協議,以便對邊界更好地控制你的要求和迴應。看看HTTPUrlConnection。 Here是一個很好的例子。

編輯:

詳細審查後的要求(見註釋),我建議通過使用火花以便流api消耗「股票蜱數據」的另一種方法。

+0

好的,謝謝你的建議,我會試試看。我確實看到過,但是當我查看文檔時,它看起來並不像我想要的那樣。 – JDiGz

+0

這不是我真正想從研究中得到的東西,似乎我想要一些能做服務器端推送數據的東西,基本上與數據流有一個長期的連接(我使用的網站是純文本流)並讓它在每次收到數據時始終發送數據。我相信大塊。我的研究已經讓我轉向了使用HTML5和/或websockets的SSE。 Websockets聽起來更復雜,因爲我想要的只是接收數據不發送和接收,所以我想弄清楚如何將JavaScript嵌入到Java中。 – JDiGz

+0

說實話,網絡套接字非常易於使用(我使用Wildfly完成了一個應用程序)。數據流的一致性要求是什麼?如果是聲音或視頻(甚至是像P2P這樣的文件共享項目),我強烈建議使用DatagramSocket(UDP協議)。 – ra2085

相關問題