0

hashtable大きなデータで使用しようとすると問題が発生します。111000を超えるレコードを含むテキスト ファイルがあり、75000 に達するとメモリ不足の例外がスローされました。これに対する解決策はありますか?

問題は次の行で発生します。

while ((text = reader.readLine())!= null);

java.lang.String <init>内部のためですが、問題は大きすぎて保存データを保持できないreadLine()ことにあると思います。Xperia Neoでテストしたところ、別のサムスンのデバイスでは問題なく動作しましたが、失敗しました。hashtable

SoundUnit私が保持しているオブジェクトhashtableは、以下の構造を持っています:

private String filename; 
private int start; 
private int end;

SoundUnit オブジェクト内の 3 フィールドのすぐ上。

テキストからデータを読み取って保存するために使用するコードは次のhashtableとおりです。

       reader = new BufferedReader(new InputStreamReader(new FileInputStream(unitSelectionFile),  "UTF-8"));
       String text=null;

       do {

                if (text.length() != 0) {
                    if (mainHash.get(text)==null)
                        mainHash.put(key, soundUnit);
                }


        } while ((text = reader.readLine())!= null);
4

2 に答える 2

0

はい、おそらくハッシュテーブルが大きすぎます。かなり新しい携帯電話である Galaxy Nexus でテストを行いましたが、230k のエントリの後にメモリが不足し、一意のキーと値の長さは約 8 文字でした。代わりに、データをデータベースに入れることをお勧めします。

BufferedReaderリーダーは少量のメモリしか使用しないため、問題になることはありません。

于 2012-06-18T08:46:47.477 に答える
0

応答から InputStream を取得し、それを解析するために任意の xml ハンドラーに渡す必要があります。これを行うと、入力ストリームを取得するときにxmlが動的に解析されるため、これでうまくいくはずです。

于 2012-06-18T08:47:28.740 に答える