Обработка больших файлов на Android - PullRequest
0 голосов
/ 23 января 2012

Я пишу приложение для Android, которое требует от меня обработки очень большого файла (скажем, 50 МБ). Файл содержит три записи: идентификатор пользователя, artistid и количество раз, которое пользователь прослушал этого исполнителя. Поэтому сейчас я пишу код, чтобы выяснить, кто самый популярный исполнитель, исходя из того, сколько раз его слышали. Я достигаю этого путем хэширования каждого идентификатора исполнителя (ключ), а затем числа раз, когда он был услышан (значение). Код работает нормально до тех пор, пока размер файла не превышает 20 Б (я запускаю приложение на Nexus S 4g, поэтому размер кучи составляет 32 МБ), но я получаю сообщение об ошибке «Недостаточно памяти» для больших файлов. Я понимаю, что код очень плохо написан. Любые предложения о том, как я мог справиться с этой проблемой!

while ((text = inRd.readLine()) != null) {
            StringTokenizer st = new StringTokenizer(text);
            while (st.hasMoreTokens()) {
                int userid = Integer.parseInt(st.nextToken());
                artistid = Integer.parseInt(st.nextToken());
                int no_times = Integer.parseInt(st.nextToken());
                if (hm.containsKey(artistid)) {
                    Integer oldval = (Integer) hm.get(artistid);
                    Integer newval = no_times + oldval;
                    hm.remove(artistid);
                    hm.put(artistid, newval);
                } else
                    hm.put(artistid, no_times);
            }
        }

1 Ответ

1 голос
/ 23 января 2012

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

Клифф

...