非常に大きなファイル(50MBなど)を処理するために必要なアンドロイドアプリを作成しています。このファイルには、userid、artistid、およびユーザーがそのアーティストを聴いた回数の3つのエントリが含まれています。だから今では、最も人気のあるアーティストがアーティストの声を聞いた回数に基づいて誰が誰であるかを調べるコードを書いています。私はアーティストID(キー)と聞いた回数(値)のそれぞれをハッシュマップすることでこれを達成します。 ファイルが20B未満であればコードは正常に動作します(Nexus S 4gでアプリケーションを実行するので、ヒープは32MBです)。しかし、大きなファイルの場合は「メモリ不足」というエラーが発生します。私はコードが非常にひどく書かれていることを認識します。どのように私はこの問題を乗り越えることができるかに関する任意の提案!大きなファイルを処理するには
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);
}
}
を支援しますか? – waqaslam
私はsqliteを認識していませんでした。私はそれを撃つでしょう。あなたの提案をありがとう.. – idok
ええ、それを与える。それは確かにあなたにコードを究極の喜びを与えるでしょう:) – waqaslam