Как эффективно читать текстовый файл с плавающей запятой с помощью 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 номеров. Всего текстовый файл занимает около 5 Мб места.

4D-массив представляет собой «увеличенное» изображение с высотой 188 пикселей и шириной 255 пикселей с тремя цветными каналами (RGB). Есть 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 (второе поколение)), процесс загрузки занимает 5 минут!

Поэтому мои вопросы: есть ли способ ускорить процесс загрузки? У меня есть свобода переопределять организацию файла по своему усмотрению.

Благодаря!

Если чтение данных из файла является основным узким местом, вы можете попытаться использовать некоторую форму асинхронного ввода-вывода, чтобы вы могли обрабатывать части строки при загрузке остальных.

Если основным узким местом является синтаксический анализ строки, вы можете как-то попытаться выполнить многопоточность процесса или переключиться на формат двоичного файла. Если вы хотите отказаться от текстового формата, лучшим решением, вероятно, является переход к бинарному файловому формату, это должно существенно сократить время обработки и, возможно, размер файла.

Intereting Posts
Невозможно сделать покупку Android в приложении с тестовой учетной записью «Издатель не может купить этот товар» Эмулятор Android: как узнать, используется ли функция виртуализации оборудования? Android – узнать, какой час дня он Что означает «блокировать все запросы сетевой нагрузки»? Наложение Android, чтобы захватить ALL touch и передать их? Android: Как начать работу в фоновом режиме? Ваш APP_BUILD_SCRIPT указывает на неизвестный файл: C: \ android-ndk / jni /Android.mk Клавиатура Android EditText не показана в фрагменте Почему Eclipse автоматически добавляет поддержку библиотеки appcompat v7 всякий раз, когда я создаю новый проект? GetChildFragmentManager () не может быть разрешен или не может быть указан Мое приложение не отображается в Google Play Store для Samsung Galaxy Note 4 Связь между двумя телефонами Android с использованием сети Wi-Fi Android, Быстрый вопрос о привязке к сервису ScrollView не прокручивается, если видна мягкая клавиатура Обновление базы данных SQLite из одной версии в другую?