2012-01-22 3 views
0

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

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

почему вы не конвертировать ваши file's данные в SQLite и делать все, что вы хотите? – waqaslam

+0

Я не знал о sqlite .. Я дам ему шанс. Спасибо за ваше предложение. – idok

+0

Да, сделайте снимок. это, безусловно, даст вам полное удовольствие хорошо кодировать :) – waqaslam

ответ

1

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

Клифф

+0

Да, я постараюсь с этим справиться! Спасибо.. – idok

Смежные вопросы