gpt4 book ai didi

java - java.util.Scanner 有那么慢吗?

转载 作者:IT老高 更新时间:2023-10-28 23:30:22 28 4
gpt4 key购买 nike

在 Android 应用程序中,我想使用 Scanner 类从文本文件中读取 float 列表(它是 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();
}

然而,这似乎非常慢(读取 10,000 个 float 需要 30 分钟!) - 正如在 2.1 模拟器上测试的那样。这是怎么回事?我不记得当我在 PC 上使用 Scanner 时它会那么慢(说实话我以前从未读过超过 100 个值)。或者是其他什么东西,比如从 Assets 输入流中读取?

感谢您的帮助!

最佳答案

正如其他发帖人所说,以二进制格式包含数据会更有效。但是,为了快速修复,我发现替换:

scanner.nextFloat();

Float.parseFloat(scanner.next());

几乎快 7 倍。

nextFloat 性能问题的根源在于它使用正则表达式来搜索下一个 float ,如果您事先知道正在读取的数据的结构,则没有必要这样做。

事实证明,大多数(如果不是全部)next* 出于类似原因使用正则表达式,因此如果您知道数据的结构,最好总是 使用 next() 并解析结果。 IE。也可以使用 Double.parseDouble(scanner.next())Integer.parseInt(scanner.next())

相关来源: https://android.googlesource.com/platform/libcore/+/master/luni/src/main/java/java/util/Scanner.java

关于java - java.util.Scanner 有那么慢吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2446805/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com