2017-12-21 7 views
0

かなり簡単な質問大きなファイルがあるとします。私の目的は、200行ごとに読み込んで、別のスレッドで処理することです。ファイルはかなり長いので、最後のスレッドは正確に200行を取得しません。Javaまたはスカラを使用して大きなファイルの最後のチャンクを処理する方法

私は約何かを考えた:PORPOSE

String[] chunk = new String[200]; 
     int count = 0; 
     String line = null; 
     while ((line = bufferedReader.readLine()) != null) { 
      chunk[count % chunk.length] = line; 
      count++; 
      if (count % chunk.length == 0) { 
       exec.execute(new Runnable() { 

        @Override 
        public void run() { 
         // TODO process what ever 

        } 
       }); 
      } 

     } 

(....しかし、残りの最後のチャンクを解決する方法を取得していない):考慮して別のスレッド上のラインの各チャンクを処理するため コードを記述最後のチャンクの、最高のパフォーマンス/最適化を実現しました。

PS - 最初にファイル全体カントー読み込み、メモリに格納するではないが、チャンク...私は反復中にそれを行うと思います...

答えて

0

あなたは等分で何かを処理する際にこれが、最後の部分通常の場合でありますチャンクサイズよりも小さくなるが、tot_lines % chunk_size == 0を除いて0より大きい。あなたができることは、whileループが終了した後に新しい最終スレッドを実行することです。 chunk配列には残りの行があります。

1
 Source 
     .fromFile("fileName") 
     .getLines 
     .grouped(200) 
     .foreach(doStuff) 
+0

質問のスレッド部分に対処するための 'Future(doStuff(_))'。 – jwvh

+0

@jwvh 'doStuff'は' Future'を返すことができます... – Dima

+0

こんにちは、あなたが示唆するように、メモリにグループ化されたファイル全体を解析するのは良いですか?私はチャンクを繰り返すと思っていたので、各チャンクはいくつかの未来を作りました...しかし、最後のチャンスは何ですか? – VitalyT

関連する問題