Я пишу приложение для 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);
}
}
почему вы не конвертировать ваши file's данные в SQLite и делать все, что вы хотите? – waqaslam
Я не знал о sqlite .. Я дам ему шанс. Спасибо за ваше предложение. – idok
Да, сделайте снимок. это, безусловно, даст вам полное удовольствие хорошо кодировать :) – waqaslam