gpt4 book ai didi

java - 如何使用 Java + LibGDX 有效地读取 float 的文本文件?

转载 作者:太空宇宙 更新时间:2023-11-03 11:07:03 25 4
gpt4 key购买 nike

我正在使用 Java/LibGDX 编写一个小型科学数据可视化应用程序。该应用程序首先读取一个描述 4 维数组的文本文件:

188 225 3 6 0.001 -0.023 1.345 2.475 ... 4.327

前四个整数指定数组的维度:188 x 255 x 3 x 6,后面是 188 x 255 x 3 x 6 ~= 760000 个数字。文本文件总共占用大约 5MB 的空间。

4D 阵列表示一个“增强”图像,高 188 像素,宽 255 像素,具有 3 个颜色 channel (RGB)。每个像素 channel 有 6 个“参数”,而不是常规 RGB 图像中的一个。

我使用了下面从官方文档中复制的方式将空格分隔的列表读入内存:

FileHandle ptmFile = Gdx.files.internal(filename);
String ptmText= ptmFile.readString();

然后我创建了一个简单的包装器类 AugPixel,它实际上是每个像素的 6 元素数组的包装器。我使用扫描仪从字符串中读取和解析每个数字(请原谅我的半伪代码):

Scanner scan = new Scanner(ptmText);
int nRows = scan.nextInt();
int nCols = scan.nextInt();
int nColors = scan.nextInt();
int nParams = scan.nextInt();


AugPixel[][][] im = new AugPixel[nRows][nCols][nColors];

for (i = 1~nRows)
for (j = 1~nCols)
for (k = 1~nColors)
im[i][j][k] = new AugPixel(nParams);
for (m = 1~nParams)
im[i][j][k].addParam(scan.nextFloat());

此方法适用于桌面版本。加载文件和构建所有 AugPixel 对象大约需要 5 秒。但是,当我将应用程序移动到实际的 android 设备(Nexus 7 32G(第 2 代))时,加载过程需要 5 分钟!

所以我的问题是:有什么方法可以加快加载过程吗?我可以自由地重新定义我认为合适的文件组织。

谢谢!

最佳答案

如果从文件读取数据是主要瓶颈,您可以尝试使用某种形式的异步 IO,以便您可以在加载其余部分的同时处理部分字符串。

如果主要瓶颈是解析字符串,您可以尝试多线程处理或切换到二进制文件格式。如果您愿意放弃文本格式,最好的解决方案可能是切换到二进制文件格式,这应该会大大减少处理时间和可能的文件大小。

关于java - 如何使用 Java + LibGDX 有效地读取 float 的文本文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31714021/

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