Joa, wenn ich die Antwort anfange mit „Wenig Kontext“, dann bedeutet das unter anderem, dass man ja nicht weiß, ob jemand
String line = bufferedReader.readLine();
while (true) System.out.println(line);
macht. Natürlich dauert da das Lesen nicht so lange, wie das, was danach kommt
Wenn man mehr Details hat, kann man fundiertere Aussagen machen. Das Einlesen einer einzelnen Datei ist (außer, wenn man sehr viel Aufwand reinsteckt, der sich oft aus verschiedenen (technischen) Gründen in diesen Fällen nicht lohnt) praktisch immer single-Threaded.
Wenn das, was mit den eingelesenen Daten gemacht werden soll, „rechenaufwändig“ ist, kann man sicher was machen. („Rechenaufwändig“ könnte (!) hier schon ein Float.parseFloat
sein).
Ganz grob: Sowas hier wird man kaum schneller machen können:
List<Point3D> points = new ArrayList<Point3D>();
while (true) {
String line = bufferedReader.readLine();
if (line==null) break;
String tokens[] = line.split(someComplexRegEx); // Evtl. rechenaufwändig
float x = Float.parseFloat(tokens[0]); // Relativ (!) rechenaufwändig
float y = Float.parseFloat(tokens[1]); // Relativ (!) rechenaufwändig
float z = Float.parseFloat(tokens[2]); // Relativ (!) rechenaufwändig
Point3D point = new Point3D(x,y,z);
point.normalize(); // Relativ (!) rechenaufwändig
points.add(point);
}
Und auch ganz grob: In solchen Fällen könnte es schneller sein, sowas zu machen:
List<String> lines = Files.readAllLines(path);
List<Point3D> points = lines.stream() // ??? .parallel() ??? Siehe unten!
.map(lineToTokens)
.map(tokensToPoint)
.map(pointToNormalizedPoint)
.collect(toList());
Also erstmal mit Files#readAllLines alles zu lesen (das hängt dann praktisch nur noch an der Geschwindigkeit der Festplatte!). Danach kommt das, wo gerechnet werden muss. Und da könnte man, wennn man das parallel()
einfügt, ggf. auf einem 4-Kerner mehr rausholen als auf einem 2-Kerner.
Aber das ist alles sehr suggestiv. Es könnte sein, dass es besser wäre, das ganze nicht parallel zu machen, sondern direkt auf dem Stream von Files#lines zu arbeiten.
Um Messen und Benchmarks kommt man da kaum drumrum. Um welchen Preisunterschied geht es denn bei dem i5 vs. i7 grob?