加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

如何使用Java LibGDX有效地读取浮点数的文本文件?

发布时间:2020-12-15 02:08:23 所属栏目:Java 来源:网络整理
导读:我正在用 Java / LibGDX编写一个小型科学数据可视化应用程序.该应用程序首先读入描述4d数组的文本文件: 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数字.总的来说,文本
我正在用 Java / LibGDX编写一个小型科学数据可视化应用程序.该应用程序首先读入描述4d数组的文本文件:

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阵列表示具有3个颜色通道(RGB)的188像素高和255像素宽的“增强”图像.每个像素通道有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,以便在加载其余部分时可以处理部分字符串.

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读