Einlesen von großes Datein optimieren durch Thread(s)

Status
Nicht offen für weitere Antworten.

Peter@Pan

Aktives Mitglied
Hi Leute,

ich möchte gerne die einlese Geschwindigkeit meines FileLoaders optimieren durch das benutzen von Threads.
Leider kenne ich mich mit Threads nicht gut aus - hat jemand von euch einen Link zu einem Tutorial oder Beispiel das vielleicht in die Rechtung meines Problems geht oder könnte ihr mir vielleicht einen Tip geben wie ich den Thread bei meinem FileLoader einsetzten kann? Könnte ich die lese Geschwindigkeit vielleicht auch erhöhen wenn ich statt eines DataInputStream einen anderen InputStream oder Reader nehme? Die Datei die zur Zeit einlese hat knapp 20000 Zeilen und wenn ich das Programm aus einem Jar starte kann ich bis 10 zählen bevor die Datei eingelesen ist.

Hier der Code vom FileLoader:
Code:
	final DefaultTableModel model;	

public FileLoader(String path,String trenner) 
	{
		this.model = new DefaultTableModel(0,5);
		Vector v = new Vector();
		File f = new File(path);
		
		if(f.exists()) //Wenn die Datei existiert dann lies sie ein.
		{
			try
			{
				System.out.println("Datei: " + path +"wird lokal geladen von " +f.getAbsolutePath());
			    BufferedReader in = new BufferedReader(new InputStreamReader(new FileInputStream(path)));
			    
			    
			    
			      for (String buffer;(buffer = in.readLine()) != null;) 
				  { 
			         if("".equals(buffer.trim())) 
		
			           continue; 
			         v = createVector( buffer,trenner);
			         
			         this.model.addRow(v);
			         
				  }    
			      in.close();	
			}
			catch( IOException exc)
			{
				exc.printStackTrace();
			}		
		}
		else //Scheinbar konnte die Datei nicht vom lokalen Datenträger geladen	
		{	 //- dann versuch aus ausführenden JAr zuladen
			try
			{
				System.out.println("Datei wird auf dem ausführenden Jar geladen");
				DataInputStream in = new DataInputStream(FileLoader.class.getResourceAsStream(path));
				
			      for (String buffer;(buffer = in.readLine()) != null;) 
				  { 
			      	if("".equals(buffer.trim())) 
			           continue; 
			         v = createVector( buffer,trenner);
			         this.model.addRow(v);    
				  }   
				in.close();	
			}
			catch( IOException exc)
			{
				exc.printStackTrace();				
			}		
		}
	}
	
/* Derzeit ohne Aufgabe - da Test Methode	
	protected DataInputStream readFile(String path) throws IOException
	{
		
		DataInputStream in = null;
		File file = new File(path);
		if(file.exists())
		{
			try 
			{
			in = new DataInputStream(new BufferedInputStream(new FileInputStream(path)));
			
			} catch (FileNotFoundException e) 
			{
	
				e.printStackTrace();
			}
		}
		else
		{
			System.out.println("Datei konnte nicht gefunden werden versuche auf dem JAR zu lesen");
			in = new DataInputStream(new BufferedInputStream(getClass().getResourceAsStream(path)));
			
			System.out.println("Hab aus jar gelesen");
			if(in == null)
			{
				System.out.println("Datei " + path + "konnte im JAR nicht gefunden werden");
			}
		}
		
		return in;
	}
	
*/	
	
	
	/**
	 * 
	 * Diese Methode liest den Inhalt der Zeile (ist im String buffer enthalten) aus und 
	 * speichert den Inhalt jeder Spalte er aktuellen Zeile in einem Vector. 
	 * @param buffer
	 * @param trenner
	 * @return vector
	 */
	protected Vector createVector(String buffer, String trenner)
	{
		Vector vector = new Vector();
		int counter = 0;
	    StringTokenizer str = new StringTokenizer(buffer,trenner,true);
        
        for( int i = 0;str.hasMoreTokens(); i++ )
        { 	vector.add(str.nextToken());
        	//Sollte zweimal hintereinander ein Trennzeichen kommen,
        	//wird zwichen diese beiden ein Leerzeichen eingefügt
	    	if(vector.elementAt(i).equals(trenner))
	    	{
	    		counter++;
	    		if(counter >1)
	    		{
	    			vector.insertElementAt(" ",i);
	    			counter = 0;
	    		}
	    	}
	    	else
	    	{
	    		counter = 0;
	    	}
        }
        /*
         * Entfernt alle Trennezeichen aus dem Vector
         */
        for(int i = 0; i< vector.size();i++)
        {
        	if(vector.elementAt(i).equals(trenner))
        	{
        		vector.removeElementAt(i);
        	}
        }
		
		return vector;
	}
 

dotlens

Top Contributor
also grundsätzlich lässt sich mit Threads die Performance nicht steigern, da trotzdem immer nur einer arbeitet...

vieleicht ist es schnellen wenn du einen BufferedReader verwendest, da dann zuesrt in den cache gelesen wird...

musst du die Daten dem user ausgeben können, müssen sie leserlich sein? oder nur kopieren oder so? falls sie nur zu kopieren sind, kannst du acuh direkt den FileReader nehmen, so muss nicht immer in chars umgewandelt werden, ist jedoch fraglich ob bei einer so grossen Datei nicht doch der Buffered Reader schneller ist...
 

Peter@Pan

Aktives Mitglied
Hab jetzt mal zum Testen meine readFile Methode aktiviert und den Konstruktor daran angepasst(BufferReader entfernt und jetzt läuft alles über den DataInputStream) und jetzt liest er die Datei aus dem Jar in weniger als 4 Sek. ein.... (liegt wahrscheinlich daran, das ich in der Methode einen FileInputStream und einen BufferedInputStream um den InputStream geschatelt habe)

Falls ihr trotzdem gute Links hab oder Verbesserungsvorschläge könnte ihr sie gerne Posten.
 
S

stev.glasow

Gast
Ich denke die createVector nimmt an meisten Zeit in Anspruch, dort sind ein paar Perfomrancekiller bei.
Kannst das mal Testen? Vieleicht kann man da ja was optimieren ...
 

Peter@Pan

Aktives Mitglied
stevg hat gesagt.:
Ich denke die createVector nimmt an meisten Zeit in Anspruch, dort sind ein paar Perfomrancekiller bei.
Kannst das mal Testen? Vieleicht kann man da ja was optimieren ...

Was/Wer ist denn alles ein Performancekiller?
 

Peter@Pan

Aktives Mitglied
sky80 hat gesagt.:
Zum Beispiel schreibst Du alle Trennzeichen rein um sie nachher rauszulöschen

Das muss ich leider machen , weil es hin und wieder vorkommt das zwischen zwei trennzeichen kein Inhalt ist - zwischen diese Trennzeichen muss aber ein Wert (z.B.: ein Leerzeichen) sein damit es später keine Exception gibt wenn später diese Stelle abgefragt (ausgewertet) wird. Falls jemand einen besseren Vorschlag hat zur Lösung dieses Problems hat, bin ich ganz Ohr.
 

Griffin

Bekanntes Mitglied
Prüf doch die leere Stelle bei der Auswertung(If (feld == leer) {...} (?!)). Oder arbeite mit einem try-Block. Dann kannst dir die Trennzeichen sparen.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
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
A CSv.Datei einlesen und die werte in zweidemosional Int Array speichern Java Basics - Anfänger-Themen 9
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
A Array einlesen und ausgeben Java Basics - Anfänger-Themen 13
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
KogoroMori21 Textdatei einlesen im Array (Selection Sort Algorithmus) Java Basics - Anfänger-Themen 3
S Wort einlesen Array ausgeben Java Basics - Anfänger-Themen 4
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
M Einzelzeichen einlesen Java Basics - Anfänger-Themen 2
C (char) Array einlesen Java Basics - Anfänger-Themen 8
B HTML File einlesen inkl. Bilder? Java Basics - Anfänger-Themen 2
E Mehrere Eingabezeilen gleichzeitig einlesen Java Basics - Anfänger-Themen 7
B HTML Datei einlesen und HTML Code in String wandeln Java Basics - Anfänger-Themen 19
V Schleife für das Einlesen von Werten für int Variablen, die Bestandteil von Arrays sein sollen Java Basics - Anfänger-Themen 16
I Nur auf Abfrage von einer Text Datei einlesen Java Basics - Anfänger-Themen 11
P Text Datei einlesen und übertragen Java Basics - Anfänger-Themen 15
E Einteilung der Räume mit einlesen einer .txt datei Java Basics - Anfänger-Themen 16
P Array einlesen von Konsole Java Basics - Anfänger-Themen 8
D Eingaben in String Array einlesen Java Basics - Anfänger-Themen 12
B CSV einlesen - Parameter a) encoding b) delimiter Java Basics - Anfänger-Themen 7
R Compiler-Fehler Einlesen von Konsolenparameter funtioniert nichtmehr Java Basics - Anfänger-Themen 4
I OOP Objektnamen über die Konsole richtig einlesen Java Basics - Anfänger-Themen 9
J Einlesen von Datei funktioniert nicht Java Basics - Anfänger-Themen 8
H Einlesen Java Basics - Anfänger-Themen 8
H Einlesen von Zahlen Java Basics - Anfänger-Themen 20
B mehrere Werte mit scanner und while schleife einlesen, max berechnen bzw addieren Java Basics - Anfänger-Themen 2
CptK Datentypen Text Dateien einlesen Java Basics - Anfänger-Themen 3
A Datentypen Unterschiedliche Datentypen in einer Eingabe einlesen Java Basics - Anfänger-Themen 2
R txt Einlesen und Verarbeiten Java Basics - Anfänger-Themen 15
M Erste Schritte CSV-File einlesen und Daten verarbeiten Java Basics - Anfänger-Themen 5
M Datei einlesen mit Scanner funktioniert nicht (FileNotFoundException) Java Basics - Anfänger-Themen 6
K Sonderzeichen einlesen Java Basics - Anfänger-Themen 3
L Input/Output XML Datei einlesen (JAXB?) Java Basics - Anfänger-Themen 10
F Zahlen aus Datei einlesen und in Array speichern Java Basics - Anfänger-Themen 2
I Datei einlesen Java Basics - Anfänger-Themen 11
J Best Practice [Code Verbesserung] TXT einlesen und in Arrayliste speichern Java Basics - Anfänger-Themen 5
A Ungeordnetes Array ordnen, Zahl einlesen und einordnen Java Basics - Anfänger-Themen 23
R Erste Schritte Sicheres einlesen eines Strings Java Basics - Anfänger-Themen 2
MaximilianTM Input/Output Einlesen und bearbeiten einer text Datei / Zeile Java Basics - Anfänger-Themen 5
C Erste Schritte Regex - Datei einlesen und splitten Java Basics - Anfänger-Themen 4
T Input/Output Einlesen eines .txt Files nur bei gesetztem Breakpoint möglich Java Basics - Anfänger-Themen 1
L RSA Public Key einlesen Java Basics - Anfänger-Themen 0
K Datei aus unbekannten Speicherorten einlesen Java Basics - Anfänger-Themen 1
T Datei in Array einlesen "null" Java Basics - Anfänger-Themen 8
U Daten aus Datei einlesen Java Basics - Anfänger-Themen 4
J Auslesen/speichern und wieder einlesen Java Basics - Anfänger-Themen 7
N Datei Zeilenweise einlesen, Ausgabe mehrere Arrays Java Basics - Anfänger-Themen 7
B Excel File einlesen und Überschrift prüfen Java Basics - Anfänger-Themen 8
M Einlesen von Integerwertern aus einer CSV Java Basics - Anfänger-Themen 8
? Methoden Boolean Wert vergleichen und einlesen Java Basics - Anfänger-Themen 1
K String einlesen und als Variable speichern Java Basics - Anfänger-Themen 8
K .txt einlesen und in ein Array packen Java Basics - Anfänger-Themen 2
M Erste Schritte Zahlen einlesen und auswerten Java Basics - Anfänger-Themen 6
N Best Practice CSV einlesen - Variables Array?! Java Basics - Anfänger-Themen 8
O Klassen Objektnamen für Methodenaufrauf einlesen lassen Java Basics - Anfänger-Themen 2
D Array Werte einlesen und ausgeben? Java Basics - Anfänger-Themen 8
C Java Scanner einlesen von txt Dokument InputMismatch Java Basics - Anfänger-Themen 9
V Hilfe zum Thema einlesen eines Datums Java Basics - Anfänger-Themen 5
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
A Textdatei mit BufferedReader einlesen Java Basics - Anfänger-Themen 0
P Einlesen von Daten via BufferedReader Java Basics - Anfänger-Themen 4
J Zahlen aus Konsole einlesen Java Basics - Anfänger-Themen 1
P Methoden ausgelesene (CSV-) Daten in Liste einer anderen Klasse einlesen Java Basics - Anfänger-Themen 0

Ähnliche Java Themen

Neue Themen


Oben