2016-10-24 2 views
0

Scheint ein bisschen ironisch, aber als ich eine 2 GB .csv-Datei Zeile für Zeile mit BufferedReader gelesen wurde, dauerte es etwa 4,5 Sekunden. Ich habe die Datei mit gzip komprimiert, was ungefähr 230MB erreicht hat. Ich habe GZIPInputStream verwendet, der mit einem BufferedReader verpackt wurde, um die .gz-Datei zu lesen. Es dauerte ungefähr 8,5 Sekunden.Lesen einer CSV-Datei schneller als das Lesen der gleichen Datei komprimiert als .gz

Ich bin mir bewusst, dass InputStream-Schnittstelle Bytes von Daten im Gegensatz zu Lesern liest, aber ich nahm an, dass wenn eine 200 MB-Datei würde schneller in den Speicher geladen werden. Kann mit .gz eine bessere Performance erzielt werden? Vielen Dank.

Antwort

2

GZIPInputStream entpackt die Datei so, wie sie sie einliest. Es gibt einen gewissen Mehraufwand beim Dekomprimieren, der die zusätzliche Zeit erklären würde.

+0

Ja das ist mein Verdacht auch. Meine Frage ist, ob wir die komprimierte Datei besser lesen können. Ich habe versucht, an der Puffergröße herumzubasteln, aber es hat nicht geholfen. Ich nahm an, dass die Komprimierung eine IO-intensive Aufgabe ist und somit die CPU-Task-Zeit nicht beeinträchtigt. Plz korrigiere mich, wenn ich falsch vermute. –

+0

Kompression belastet CPU mehr. Sie handeln im Grunde genommen den Platz auf der Disc für eine erhöhte CPU-Auslastung –

0

Wie lange dauert es, bis der Computer die Datei dekomprimiert? Kann ich über 8.5 - 4.5 = 4 Sekunden raten? Ich denke, das ist ein Grund für die zusätzliche Zeit.