ich eine große Textdatei über mehrere GBs lesen möchten lesen und es ohne das Laden der gesamten Datei aber Laden Brocken davon verarbeiten. (Verarbeitung beinhaltet Instanzen Wortzählung)vs Random Mit NIO Stücke von Dateien
Wenn ich Verwenden Sie eine gleichzeitige Hash-Map, um die Datei parallel zu verarbeiten, um sie effizienter zu machen. Gibt es eine Möglichkeit, NIO oder eine Direktzugriffsdatei zu verwenden, um sie in Blöcken zu lesen? Wäre es noch effizienter?
Die aktuelle Implementierung eines gepufferten Leser verwendet, die etwas geht:
while(lines.size() <= numberOfLines && (line = bufferedReader.readLine()) != null) {
lines.add(line);
}
lines.parallelStream().. // processing logic using ConcurrentHashMap
Entscheiden Sie sich. Welches ist es? NIO? Oder 'RandomAccessFile'? In jedem Fall können Sie Millionen von Zeilen pro Sekunde mit 'BufferedReader' lesen. Sie werden nicht mehr als sagen, 20% schneller mit NIO, und es wird * langsamer * mit 'RandomAccessFile', da es keine Pufferung gibt: und Multi-Threading kann es schlimmer machen oder gar nichts tun , da die Festplatte nicht multi-threaded ist. Müssen Sie das wirklich tun? – EJP
Ich denke über mehr Leistungsverbesserungen nach. Die aktuelle Implementierung ist also effizienter? – Maddy
würde ich * weniger * Leistungsoptimierungen in Betracht ziehen. Verarbeiten Sie die Datei Zeile für Zeile und vergessen Sie das Chunking und parallele Streaming. Es scheint mir, dass ich Ihre letzte Frage bereits beantwortet habe. Ich habe es sicherlich versucht. – EJP