Gibt es eine Möglichkeit, ein Stream<String> stream
aus einem empfangen BufferedReader reader
derart, daß jede Zeichenkette in stream
eine Zeile von reader
mit der zusätzlichen Bedingung darstellt, daß stream
direkt bereitgestellt wird (vor reader
alles lesen)? Ich möchte die Daten von stream
parallel zu erhalten, um sie von reader
zu erhalten, um Zeit zu sparen.Convert `BufferedReader` auf` `Strom <String> in einer parallelen Art und Weise
Edit: Ich möchte die Daten parallel zum Lesen verarbeiten. Ich möchte verschiedene Linien nicht parallel bearbeiten. Sie sollten in der Reihenfolge verarbeitet werden.
Lassen Sie uns ein Beispiel machen, wie ich Zeit sparen möchte. Nehmen wir an, unser reader
wird uns 100 Zeilen präsentieren. Es dauert 2 ms, um eine Zeile zu lesen und 1 ms, um sie zu verarbeiten. Wenn ich zuerst alle Zeilen lese und sie dann verarbeite, brauche ich 300 ms. Was ich machen möchte ist: Sobald eine Zeile gelesen wird, möchte ich sie verarbeiten und parallel die nächste Zeile lesen. Die Gesamtzeit beträgt dann 201 ms.
Was mir an BufferedReader.lines()
nicht gefällt: Soweit ich verstanden habe, fängt das Lesen an, wenn ich die Zeilen bearbeiten will. Nehmen wir an, ich habe bereits meine reader
, muss aber Vorberechnungen machen, bevor ich die erste Zeile verarbeiten kann. Nehmen wir an, sie kosten 30 ms. Im obigen Beispiel wäre die Gesamtzeit dann 231 ms oder 301 ms unter Verwendung von reader.lines()
(können Sie mir sagen, welche dieser Zeiten korrekt ist?). Aber es wäre möglich, die Arbeit in 201 ms zu erledigen, da die Vorberechnungen parallel zum Lesen der ersten 15 Zeilen durchgeführt werden können.
Marko Topolnik hat einen Spliterator Wrapper geschrieben, mit dem Sie die Batchgröße variieren können: http://stackoverflow.com/a/22575506/1441122 –