快速获取Java输入
我试图在采访街上做一个问题,我的问题与算法无关,而是与Java有关。对于这个挑战,需要从System.in获取一定数量的输入行(几十万行)。每行都有一个由两个或三个令牌组成的预期模式,因此无需进行任何验证或解析(使扫描仪无效)。我自己的算法是正确的,只占整个运行时间的一小部分(范围为5%-20%,具体取决于边缘情况) 通过一些研究和测试,我发现对于这个问题,BufferedReader类在获取这个问题的输入数据方面要比Scanner类快得多。然而,BufferedReader对于挑战来说仍然不够快。有人能给我指一篇文章或API,让我研究一种更好的获取输入的方法吗快速获取Java输入,java,input,Java,Input,我试图在采访街上做一个问题,我的问题与算法无关,而是与Java有关。对于这个挑战,需要从System.in获取一定数量的输入行(几十万行)。每行都有一个由两个或三个令牌组成的预期模式,因此无需进行任何验证或解析(使扫描仪无效)。我自己的算法是正确的,只占整个运行时间的一小部分(范围为5%-20%,具体取决于边缘情况) 通过一些研究和测试,我发现对于这个问题,BufferedReader类在获取这个问题的输入数据方面要比Scanner类快得多。然而,BufferedReader对于挑战来说仍然不够
如果重要的话,我将通过调用readLine()方法和String split()方法来使用BufferedReader来分离标记 如果没有任何有用的信息,我能做的就是提供一个概括的答案:我能想到一些事情(从我的头顶):
动动脑筋,开箱思考。BufferedDataInputStream应该比BufferedReader快得多。
你可以在这里找到这个罐子:。
javadoc。
这是这个项目的一部分
请注意,我从未测试过这个…
String.split()
使用正则表达式,这可能会带来一些不必要的开销。也许不是。有趣的是,代码中真正的瓶颈在哪里。您是否尝试增加BufferedReader
中的缓冲区大小?如果是的话,它会影响性能吗?您使用的是BufferedInputStream吗?出于测试目的,我们需要更多的信息。我正在使用BufferedReader和FileReader从文件中读取数据,因为对于BufferedReader和InputStreamReader,我无法以足够快的速度手动输入数据。瓶颈似乎是边缘输入,需要500000个输入程序平均需要130ms才能完成。在运行500000次的循环中注释掉除readLine()之外的所有内容可将运行时间减少到110ms。开销方面,尽管令牌由5个字符串、0到100000之间的整数以及0或1的整数值组成。我认为split()不应该那么累人。