在一个安卓应用程序中,我想使用Scanner类从一个文本文件(OpenGL的顶点坐标列表)中读取浮点数的列表。确切的代码是:
Scanner in = new Scanner(new BufferedInputStream(getAssets().open("vertexes.off")));
final float[] vertexes = new float[nrVertexes];
for(int i=0;i<nrVertexFloats;i++){
vertexes[i] = in.nextFloat();
}然而,这似乎是令人难以置信的慢(它花了30分钟来读取10,000个浮点数!)-在2.1模拟器上进行了测试。到底怎么回事?当我在PC上使用Scanner时,我不记得它有那么慢(老实说,我以前从来没有读过超过100个值)。或者是其他东西,比如从资产输入流中读取?
谢谢你的帮助!
发布于 2011-10-16 06:42:16
对于Spotify挑战赛,他们写了一个小的Integer.parseInt/Double.parseDouble/Long.parseLong实用程序来更快地解析IO:http://spc10.contest.scrool.se/doc/javaio这个实用程序被称为Kattio.java,它使用BufferedReader,StringTokenizer和java来读取数字。
发布于 2010-03-15 20:59:32
是的,我没有看到这样的东西。我可以在桌面上以这种方式在4秒内读取大约10M个浮点数,但它不可能有太大的不同。
我正在尝试其他的解释--它是否阻塞了从getAssets()读取输入流?我可能会尝试完整地阅读该资源,对其进行计时,然后查看扫描所花费的额外时间。
发布于 2010-03-15 22:53:47
Scanner可能是问题的一部分,但您需要分析您的代码才能知道。替代方案可能会更快。下面是一个比较Scanner和StreamTokenizer的简单benchmark。
https://stackoverflow.com/questions/2446805
复制相似问题