如何使用Java LibGDX有效地读取浮点数的文本文件?
我正在用
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,以便在加载其余部分时可以处理部分字符串.
如果主要瓶颈是解析字符串,您可能会以某种方式尝试多线程进程或切换到二进制文件格式.如果您愿意放弃文本格式,最好的解决方案可能是切换到二进制文件格式,这应该会大大减少处理时间和文件大小. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |