Java 有没有更有效的方法从网上读取数据?

Java 有没有更有效的方法从网上读取数据?,java,performance,url,web,readline,Java,Performance,Url,Web,Readline,我正在制作一个应用程序,从一个以txt格式打印数据的网站上读取实时股票行情数据 我只关心最后一行 我有一个计时器事件在URL上每隔1/4秒发出一次,然后读取数据。 现在第一次大约需要10秒,之后每次需要4秒。 我想知道/希望有更好的方法从流中读取数据或从网络中获取数据。 这就是我从网上获取数据的方式 URL website = new URL("www.somesite.com/blah.php?csv_format=txt"); isr = new InputStreamRea

我正在制作一个应用程序,从一个以txt格式打印数据的网站上读取实时股票行情数据

我只关心最后一行 我有一个计时器事件在URL上每隔1/4秒发出一次,然后读取数据。 现在第一次大约需要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);
    }

为了更好地控制请求和响应的边界,使用HTTP协议会容易得多。看看HTTPUrlConnection。这是一个很好的样本

编辑:


在详细审查了要求(请参见注释)后,我提出了另一种方法,即使用Spark流来使用股票行情数据。

您的最后一次尝试总有一天会失败,因为您可能会得到不完整的最后一行,想象一下它从偏移量8190开始。只要行不超过缓冲区长度,使用两个缓冲区就可以了。是的,我从来没有这样实现过,但我认为这种方式可能是最快的,我感兴趣的是计时。在我使用两个名为buffer和lineBuffer的缓冲区之前。好的,谢谢你的建议,我会尝试一下。我以前确实看到过这一点,但当我查看文档时,它看起来并不像我想要的那样。这不是我从研究中真正想要的。似乎我想要的是能够在服务器端推送数据的东西,基本上,我与一个数据流有一个长期的连接,而我使用的站点是一个纯文本流,每次接收数据时,它都会始终如一地发送数据。我相信大块。我的研究已经引导我使用HTML5和/或WebSocket进行SSE。Websockets听起来更复杂,因为我想要的只是接收数据,而不是发送和接收数据,所以我正试图找出如何将javascript嵌入java。老实说,Websockets非常容易使用,我已经使用Wildfly开发了一个应用程序。您对数据流的一致性要求是什么?如果是声音或视频,甚至是文件共享项目,如P2P,我强烈建议使用DatagramSocket UDP协议。它是纯文本数据流,我不确定一致性要求是什么意思。这是股票行情数据,所以它只在东部时间9:30-4:30生成数据,但我正在我的程序中绘制/分析数据。啊!然后,您应该真正了解Spark streaming API。我也用过ut,而且很容易学。