Как инициализировать огромные массивы с плавающей точкой в ​​Java, Android? - PullRequest
0 голосов
/ 07 ноября 2011

Я создавал OpenGL-приложение для Android. Я пытался визуализировать объект opengl с вершинами более 50000.

float itemVerts [] = {
// f 231/242/231 132/142/132 131/141/131
0.172233487787643f, -0.0717437751698985f, 0.228589675538813f,
0.176742968653347f, -0.0680393472738536f, 0.2284149434494f,
0.167979223684599f, -0.0670168837233226f, 0.24286384937854f,
// f 131/141/131 230/240/230 231/242/231
0.167979223684599f, -0.0670168837233226f, 0.24286384937854f,
0.166391290343292f, -0.0686544011752973f, 0.241920432968569f,......

и многое другое .... Но когда я делаю это в функции или конструкторе, я получаю сообщение об ошибке при компиляции этого. Код метода () превышает ограничение в 65535 байт. Поэтому мне было интересно, есть ли другой способ сделать это.

Я попытался сохранить значение в файле и прочитать его обратно. Но операция ввода-вывода, с разбором строки такой огромной записи, очень медленная. Занимает более 60 сек. Что не хорошо.

Пожалуйста, дайте мне знать, если есть другой способ сделать это. Спасибо за ваше время и помощь.

Ответы [ 4 ]

1 голос
/ 07 ноября 2011

Но когда я делаю это в функции или конструкторе, я получаю ошибку при компиляции этого. Код метода () превышает ограничение 65535 байт.Поэтому мне было интересно, есть ли другой способ сделать это.

Поместить это вне конструктора (как переменная класса или поле)?Если это не изменится, просто сделайте это константой.Если оно действительно изменится, сделайте его константой в любом случае и скопируйте его в конструктор.

Я попытался сохранить значение в файле и прочитать его обратно.Но операция ввода-вывода, с разбором строки такой огромной записи, очень медленная.Занимает более 60 сек.Что нехорошо.

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

0 голосов
/ 07 ноября 2011

Я бы обработал и сохранил float в двоичном виде, затем отобразил бы его как байтовый буфер и создал из него массив fload.Таким образом, вы получите массив с плавающей точкой, без разбора или выделения пространства.

0 голосов
/ 07 ноября 2011

В этом случае я обычно использую папку assets для хранения файлов в двоичном формате (даже вы можете определить какой-то формат файла для включения вершины, нормали и т. Д.) И выделить его при инициализации приложения, как объясняет wannik.

0 голосов
/ 07 ноября 2011

Программа не должна анализировать число с плавающей запятой, если мы предварительно обработаем данные.

Напишите другую программу, которая записывает все числа с плавающей запятой в двоичный файл, используя DataOutputStream.

В вашей программе прочитайте их обратно, используя DataInputStream. Возможно, вы захотите связать это с BufferedInputStream.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...