Einlesen in Array von Textdatei sehr langsam

coldABI

Mitglied
Hallo liebe Experten,

ich möchte mit einer Methode den Inhalt einer Textdatei (String) in ein zweidimensionales Array einlesen. Die Textdatei umfasst ca. 15 Mio. Zeilen mit jeweils 4 Werten.

Die ersten 5 Mio. Zeilen werden auch ohne Probleme eingelesen, ab da wird dann nunr noch im Sekundentakt eine Zeile eingelesen, sodass ich wahrscheinlich Monate warten müsste, bis in das Array vollständig eingelesen ist.

Unten aufgeführt der entsprechende Code.

Java:
    public static String[][] readData(String dateiname) {      
        
        String[][] gesamt;
        gesamt = new String[15025970][4];
        
        try {
        
        File fl;
        fl = new File(dateiname);
        
        FileReader fr;
        fr = new FileReader(fl);
        
        BufferedReader br;
        br = new BufferedReader(fr);
        
        String zeile = br.readLine();
        
        int i = 0;
        
            while(zeile != null) {
            
                String[] verbund = zeile.split("\t");
            
                String wert1 = verbund[0];
                String wert2 = verbund[1];
                String wert3 = wert1+wert2;
                String wert4 = verbund[2];
                String wert5 = verbund[3];
                    
                gesamt[i][0] = wert3;
                gesamt[i][1] = wert4;
                gesamt[i][2] = wert5;
                gesamt[i][3] = "0";

                i = i+1;
                
                System.out.println(i);
                
                zeile = br.readLine();
            }       
        }
        
        catch(FileNotFoundException e1) {
            System.out.println(e1);
        }
        
        catch(IOException e2) {
            System.out.println(e2);
        }
        
        return gesamt;
        
    }

Gibt es eine Möglichkeit das Einlesen zu beschleunigen (andere Vorgehensweise, Optimierung des Codes)?


Danke im Voraus.


Viele Grüße

Stefan
 
Zuletzt bearbeitet:

diggaa1984

Top Contributor
also ich würde in Anbetracht der Menge und der Sinnhaftigkeit des Erstellens neuer Objekte das erstmal wie folgt abändern:
Java:
while(zeile != null) {
           
                String[] verbund = zeile.split("\t");
           
                String wert1 = verbund[0];
                String wert2 = verbund[1];
                String wert3 = wert1+wert2;
                String wert4 = verbund[2];
                String wert5 = verbund[3];
                   
                gesamt[i][0] = wert3;
                gesamt[i][1] = wert4;
                gesamt[i][2] = wert5;
                gesamt[i][3] = "0";
 
                i = i+1;
               
                System.out.println(i);
               
                zeile = br.readLine();
            }      
        }

zu
Java:
String[] verbund;
while(zeile != null) {
           
                verbund = zeile.split("\t");
                   
                gesamt[i][0] = verbund[0]+verbund[1];
                gesamt[i][1] = verbund[2];
                gesamt[i][2] = verbund[3];
                gesamt[i][3] = "0";
 
                i = i+1;
               
                System.out.println(i);               
                zeile = br.readLine();
            }      
        }
 

coldABI

Mitglied
Hallo,

das ist auf alle Fälle besser, als 60 Mio. Objekte zu erzeugen. Dennoch geht die Geschwindigkeit ab ca. 5 Mio. Zeilen rasant nach unten, sodass man nur noch abbrechen kann.

Gibt es noch andere Möglichkeiten?


Danke und viele Grüße

Stefan
 

BuddaKaeks

Bekanntes Mitglied
Also dein Programm braucht bei mir erst mal 5 sekunden, um das Array zu erzeugen :)

Aber dann geht es eigentlich, ab zeile 7000000 schafft es etwa 100000 pro Sekunde
 

BuddaKaeks

Bekanntes Mitglied
ok, nach öfteren versuchen hat sich herausgestellt, dass das programm in etwa ab zeile 6.000.000 alle 500.000 zeile hängt.

Das liegt dann warscheinlich an der Festplatte
 

coldABI

Mitglied
Ich habe es wie folgt geändert. Nun wird es erfolgreich eingelesen. Er braucht bei Zeile 14.000.000 ca. 8 Sekunden für 10.000 Zeilen. Das ist aber voll im Rahmen.

Danke für die Antworten!

Java:
while(zeile != null) {
            
                String[] verbund = zeile.split("\t");
                
                String wert3 = verbund[0]+verbund[1];
                String wert4 = verbund[2];
                String wert5 = verbund[3];
                    
                gesamt[i][0] = wert3.intern();
                gesamt[i][1] = wert4.intern();
                gesamt[i][2] = wert5.intern();

                i = i+1;
                
                System.out.println(i);
                
                zeile = br.readLine();
            }
 

Ruzmanz

Top Contributor
Die hohe Anzahl an System.out.println() verlangsamt das Ganze. Zudem solltest du schon im Vorfeld für dein Programm mehr RAM reservieren: -Xmx2048m ;)
 

coldABI

Mitglied
Vielen Dank für den Tipp. Da hab ich mir doch den Zähler ausgegeben, um das Problem zu beheben, habe es aber damit erst erzeugt. :)

Zusammen mit der Reservierung von mehr Speicher, werden die Werte nun in ca. 2 Minuten eingelesen.


Vielen Dank noch einmal.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
KogoroMori21 Textdatei einlesen im Array (Selection Sort Algorithmus) Java Basics - Anfänger-Themen 3
G Erste Schritte Textdatei einlesen und in Array speichern Java Basics - Anfänger-Themen 5
G Inhalt einer Textdatei in ein Array einlesen Java Basics - Anfänger-Themen 2
A CSv.Datei einlesen und die werte in zweidemosional Int Array speichern Java Basics - Anfänger-Themen 9
A Array einlesen und ausgeben Java Basics - Anfänger-Themen 13
S Wort einlesen Array ausgeben Java Basics - Anfänger-Themen 4
C (char) Array einlesen Java Basics - Anfänger-Themen 8
P Array einlesen von Konsole Java Basics - Anfänger-Themen 8
D Eingaben in String Array einlesen Java Basics - Anfänger-Themen 12
F Zahlen aus Datei einlesen und in Array speichern Java Basics - Anfänger-Themen 2
A Ungeordnetes Array ordnen, Zahl einlesen und einordnen Java Basics - Anfänger-Themen 23
T Datei in Array einlesen "null" Java Basics - Anfänger-Themen 8
K .txt einlesen und in ein Array packen Java Basics - Anfänger-Themen 2
N Best Practice CSV einlesen - Variables Array?! Java Basics - Anfänger-Themen 8
D Array Werte einlesen und ausgeben? Java Basics - Anfänger-Themen 8
E Erste Schritte txt.Datei mit BufferedReader einlesen und in 2D-Array abspeichern Java Basics - Anfänger-Themen 15
S Werte in Array einlesen Java Basics - Anfänger-Themen 2
J Integer in Array einlesen Java Basics - Anfänger-Themen 14
C Zeilen in Array einlesen und splitten? Java Basics - Anfänger-Themen 17
stylegangsta Input/Output Hat eclipse eine Macke oder mein Code Array Datei einlesen Java Basics - Anfänger-Themen 5
N Mehrdimensionales float Array aus .txt-Datei einlesen? Java Basics - Anfänger-Themen 17
B Probleme beim einlesen einer short variablen für einen Array Java Basics - Anfänger-Themen 1
A Datei in Array einlesen Java Basics - Anfänger-Themen 6
S Zeilenweises Einlesen in Array Java Basics - Anfänger-Themen 2
K Input/Output 6000 Zeilen einlesen und String-Array vergleichen? Java Basics - Anfänger-Themen 1
H Zeichenketten einlesen und dann in Array speichern Java Basics - Anfänger-Themen 6
J Integer Werte in Array einlesen Java Basics - Anfänger-Themen 6
D Erste Schritte In Array einlesen Java Basics - Anfänger-Themen 15
B zahlenfolge einlesen und in array umwandeln Java Basics - Anfänger-Themen 7
M Methoden Daten aus einer SQL-Abfrage in eine mehrdimensionales Array einlesen Java Basics - Anfänger-Themen 7
T Anfänger hat Probleme mit Array einlesen ;) Java Basics - Anfänger-Themen 13
B Datentypen Werte in einen Array einlesen und danach die beiden höchsten Werte wieder ausgeben Java Basics - Anfänger-Themen 3
Semox Datentypen Einlesen von char in Array schlägt unerwartet fehl Java Basics - Anfänger-Themen 4
X Zahlenfolge in Int-Array einlesen? Java Basics - Anfänger-Themen 7
B aus .txt in array einlesen Java Basics - Anfänger-Themen 29
E Einlesen einer int und speichern in einem Array Java Basics - Anfänger-Themen 7
S Unbekannte Daten einlesen, speichern und in einem byte Array speichern Java Basics - Anfänger-Themen 3
S CSV Datei in Array einlesen Java Basics - Anfänger-Themen 25
P Zahlen aus Datei in Array einlesen Java Basics - Anfänger-Themen 21
B Strings aus Array einlesen klappt nicht Java Basics - Anfänger-Themen 5
A datei in ein 2dimensionales array einlesen? Java Basics - Anfänger-Themen 9
O String in array einlesen alle x zeichen Java Basics - Anfänger-Themen 15
W String in ein String-Array einlesen ? Java Basics - Anfänger-Themen 2
K Strings in Array einlesen Java Basics - Anfänger-Themen 3
G Datei einlesen und in einem Array ablegen? Java Basics - Anfänger-Themen 5
T Array einlesen und ausgeben Java Basics - Anfänger-Themen 8
H text string alle 100 zeichen in ein 1D array einlesen ? Java Basics - Anfänger-Themen 8
F Characters in int[] Array einlesen und wieder ausgeben Java Basics - Anfänger-Themen 5
J Text in vorgegebenes Array einlesen Java Basics - Anfänger-Themen 2
Jen Array einlesen, Int und Char Java Basics - Anfänger-Themen 57
J einlesen von datei, float und array und und und. Java Basics - Anfänger-Themen 7
M Datei einlesen & in Array speichern Java Basics - Anfänger-Themen 4
L zahlen in mehrdimensionales array einlesen Java Basics - Anfänger-Themen 3
E Array ueber Tastatur einlesen Java Basics - Anfänger-Themen 2
H Codetabelle Einlesen und in Array speichern Java Basics - Anfänger-Themen 1
I einen text von tastatur in array einlesen und auch ausgeben Java Basics - Anfänger-Themen 1
S Einlesen einer Datei und ins Array speichern Java Basics - Anfänger-Themen 11
C Frage zu: String einlesen -> Array von Chars erhalten Java Basics - Anfänger-Themen 4
E Array in funktion einlesen und ausgeben Java Basics - Anfänger-Themen 4
P Eine Datei einlesen und in einem Array speichern Java Basics - Anfänger-Themen 11
farbenlos Csv Datei in Java einlesen Java Basics - Anfänger-Themen 18
G JTree speichern und wieder einlesen Java Basics - Anfänger-Themen 5
T Text einlesen code was kommt dahin? Java Basics - Anfänger-Themen 1
S SeriellenPort einlesen Java Basics - Anfänger-Themen 3
I XML einlesen und Objekte bekommen Java Basics - Anfänger-Themen 2
M Daten aus .txt Datei einlesen und weiterverarbeiten Java Basics - Anfänger-Themen 80
julian0507 Wörter einlesen lassen und rückwärts ausgeben Java Basics - Anfänger-Themen 7
S JSON einlesen und benutzen Java Basics - Anfänger-Themen 5
I Ical4j / Kalender einlesen von URL - Fehler: "Unparseable date" Java Basics - Anfänger-Themen 16
Saiko Zeilen einer Datei einlesen Java Basics - Anfänger-Themen 3
sserio Txt Datei einlesen Java Basics - Anfänger-Themen 9
D Strings aus Excel-Datei einlesen Java Basics - Anfänger-Themen 2
julian112 Input/Output .gz bzw. .txt Datei Einlesen und Umgang mit Exceptions Java Basics - Anfänger-Themen 1
M String beim einlesen formatieren Java Basics - Anfänger-Themen 12
P Datei einlesen, nach Begriff filtern und in Datei ausgeben. Problem Standardausgabe über Konsole Java Basics - Anfänger-Themen 19
G JSP Textfeld einlesen Java Basics - Anfänger-Themen 2
M Einlesen > new Leser Java Basics - Anfänger-Themen 5
W Werte durch Konsole einlesen Java Basics - Anfänger-Themen 10
K Datum einlesen und Tag, Monat und Jahr einzeln ausgeben Java Basics - Anfänger-Themen 1
K Datum einlesen und Tag, Monat und Jahr einzeln ausgeben Java Basics - Anfänger-Themen 1
I Java String einlesen und auslesen Java Basics - Anfänger-Themen 11
A Input/Output Mehrere Csv-Dateien einlesen Java Basics - Anfänger-Themen 2
S CSV einlesen und mit Komma trennen Java Basics - Anfänger-Themen 12
CptK Richtigen Pfad beim einlesen von Datei finden Java Basics - Anfänger-Themen 2
I Java-Wort einlesen und ausgeben Java Basics - Anfänger-Themen 7
J Csv-Datei einlesen Java Basics - Anfänger-Themen 52
JD_1998 Arrays einlesen, zwischenspeichern und wieder ausgeben Java Basics - Anfänger-Themen 8
L Konstruktor für eine Map-Datei/Map-Datei einlesen Java Basics - Anfänger-Themen 5
L Datein einlesen Java Basics - Anfänger-Themen 1
O zufälliges Wort aus einer Datei einlesen Java Basics - Anfänger-Themen 32
E Input/Output Datei anhand von Dateinamen einlesen Java Basics - Anfänger-Themen 5
C Datei über relative Pfade einlesen Java Basics - Anfänger-Themen 6
A Input/Output Dateien einlesen und ausgeben Java Basics - Anfänger-Themen 7
A Klasse um daten zu einlesen Java Basics - Anfänger-Themen 26
A 2d Arrays aus txt.file einlesen Java Basics - Anfänger-Themen 16
A Textdatei mit stream einlesen Java Basics - Anfänger-Themen 2
P Datei einlesen und zurückgeben Java Basics - Anfänger-Themen 5
G String wird nach Einlesen aus Datei nicht erkannt Java Basics - Anfänger-Themen 3
M String in Scanner einlesen Java Basics - Anfänger-Themen 6
E TXT FILE EINLESEN Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben