0

6.5 十万行を含むファイルがあります。LineNumberReader を使用して、このファイルのすべての行を読みたいと思います。

ただし、これらの多数の行を別のサードパーティ ライブラリに追加すると、outofMemoryError が発生します。

私がやろうとしているのは、一度に 200000 行のファイルを読み取り、これらの行をサードパーティのライブラリに追加することです。

LineNumberReader を使用していますが、ファイル全体が読み取られていると思いますが、行数が 200000 に達したときにループを中断し、これらをサードパーティのライブラリに追加するという条件を提供しました..

同じコード スニペット:

    LineNumberReader lnr=new LineNumberReader(new FileReader(file));
    String line=null;
    int i=0;      
    while(flags)
              {
     while( null != (line = lnr.readLine()) ){  
    i++;   
     3rdPartyLibrary.add(line.trim());
    if(i==200000)
                {      
                    System.out.println("Breaking");
                    lnr.mark(i);
                    break;
                }  
                if(i==400000)
                {
                    System.out.println("" );
                    lnr.mark(i);
                    break;
                }
                if(i==600000)
                {
                    System.out.println("BREAKING " );
                    lnr.mark(i);
                    break;
                }
     }
    if(line==null)
              {
                  System.out.println(" FLAG");
                  flags=false;
              }
lnr.reset();
    }

ここでやろうとしているのは、最初の反復で 0 ~ 200000 のファイルを読み取ることです。次に、個々の行を読み取り、サードパーティのライブラリに追加します。これが完了したら、(200001-400000) から別の 200000 行を読み取り、同じアクティビティを繰り返します。

助けが必要..誰かが案内してくれませんか..

4

2 に答える 2

0

私が思う限り、このエラーは、プログラムがすでに多くのメモリを占有しているため、メモリ不足のために JVM がより多くのオブジェクト (この場合は String) の割り当てに失敗したときに発生します。ループ内のどこかに System.gc() を呼び出して、動作するかどうかを確認してください。

于 2013-09-01T05:37:59.547 に答える