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:
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;
}