2017-12-21 5 views
0

Ziemlich einfache Frage, Angenommen, ich habe eine große Datei, Mein Zweck ist es, alle 200 Zeilen zu lesen und einige Prozesse auf anderen Thread. Die Datei ist ziemlich lang, so dass der letzte Thread nicht genau 200 Zeilen erhält.Wie man den letzten Teil der großen Datei mit Java oder Scala behandelt

Ich dachte, etwas über sich selbst: (aber nicht bekommen, wie die verbleibende letzte Chunk .... zu lösen)

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 

        } 
       }); 
      } 

     } 

porpose: jedes Chunk von Linien auf anderen Thread nehmen Code unter Berücksichtigung handhaben der letzte Brocken, mit der besten Leistung/Optimierung.

PS - nicht tho ganze Datei zuerst und Speicher in dem Speicher lesen chunked ... Ich denke, tut es während der Iteration ...

Antwort

0

Dies ist ein üblicher Fall ist, wenn man etwas in gleichen Teilen zu verarbeiten, der letzte Teil ist kleiner als die Chunk-Größe, aber größer als 0, mit Ausnahme des Falls tot_lines % chunk_size == 0. Sie können einen neuen letzten Thread ausführen, nachdem die while-Schleife beendet wurde. Im Array chunk haben Sie die restlichen Zeilen.

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

'Zukunft (DoStuff (_))', um den Thread-Teil der Frage zu adressieren. – jwvh

+0

@jwvh 'doStuff' könnte eine' Zukunft' zurückgeben ... – Dima

+0

Hallo, wie Sie vorschlagen, ist es gut, die ganze Datei in den Speicher gruppiert zu analysieren ....? Ich dachte daran, über Chunks zu iterieren, damit jeder Chunk etwas Future macht ... aber was mit dem letzten? – VitalyT

Verwandte Themen