2014-06-13 22 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

相关问题