我正在使用Java/LibGDX编写一个小型的科学数据可视化应用程序。该应用程序首先读取描述4D数组的文本文件:
188 225 3 6 0.001 -0.023 1.345 2.475 ... 4.327
第一个四个整数指定了数组的维度:188 x 255 x 3 x 6,后面跟着大约760000个数字。总体而言,这个文本文件占用约5MB的空间。
这个4D数组代表了一个188像素高、255像素宽、带有3个颜色通道(RGB)的“扩充”图像。与常规RGB图像中仅有一个参数不同,每个像素通道都有6个“参数”。
我使用了下面从官方文档中复制过来的方式将以空格分隔的列表读入内存:
FileHandle ptmFile = Gdx.files.internal(filename);
String ptmText= ptmFile.readString();
然后我创建了一个简单的封装类AugPixel,它实际上是每个像素的6元素数组的包装器。我使用Scanner从字符串中读取和解析每个数字(请原谅我使用的半伪代码):
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(第二代))时,加载过程需要5分钟!
所以我的问题是:有没有办法加快加载速度?我可以自由地重新定义文件的组织方式。
谢谢!
Files.readAllBytes
),然后再处理它,速度可能会更快。也许是因为访问太多小文件而导致速度变慢。 - noone