Wie lange dauert bei euch das Dateilesen?

  • Themenstarter Themenstarter Guest
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
G

Guest

Gast
Hallo!
Wie lange dauert bei euch das Lesen von Dateien(Bei einer Größe von 1 MB) mit Java?
Damit meine ich die Datei zu lesen und Buchtsabe für Buchstabe in einen String zu speichern.
Ich wundere mich, wieso es bei mir selbst bei 500KB nich langsam dauert.(Hardwaretechnisch bin ich gut ausgestattet). Sollte es bei euch auch langsam gehen(viele Minuten), bitte sagt es mir, dann muss es an meinem Programm liegen....
 
Einverstanden, ich werde jetzt mal die Zeit stoppen(nur bei einfachem Dateienlesen, kein Swing und so).
Ich hätte sonst eine ProgressBar laufen, aber verlangsamt sie die Zeit so extrem?
 
kommt auf die programmierung an. ein system.out braucht auch ohne ende zeit... mess mal und sag bescheid.

ferner ist auch nicht klar was du mit den eingelesenen daten machst. nur ausgeben oder weiter durch x schichten schieben bis der dreck dann in der datenbank landet...
 
Gut, dann weiß ich Bescheid. ^^
(jetzt sind es 10 min, ich denke ich kann abbrechen)

Die Datei ist etwa 500 KB groß.

Hier der Quellcode:
Code:
		RandomAccessFile f = null; 
		File file = new File("slow.bmp");
		String data="";
		int counter=0;
		try { 
		  f = new RandomAccessFile(new File("slow.bmp"), "r"); 
		  do {
		  data+=(char)f.read();
		  counter++;
		  } while(counter<file.length());
		} 
		catch (Exception e) { 
		  e.printStackTrace(); 
		} 
		finally { 
		  if (f != null) try { f.close(); } catch (Exception e) { e.printStackTrace(); } 
		}
		System.out.println("Fertig!");
 
Ich hab festgestellt, das auf meinem Macintosh mit mit 1 Ghz ich ca 1000 Textdateien in 10 Sekunden erstellen kann.

Auf meinem Windows mit 1 Ghz brauche ich dafür jedoch ca 30 Sek.
Wobei bei anderen befehlen, der windows wieder schneller ist?
Hängt vielleicht mit den unterschiedlichen Prozessoren zusammen??
ka :?:
 
Gut, das werde ich austesten. In meinem letzten Programm hat die Schleife nicht angehalten, weil ich das mit dem -1 ausprobiert habe, da habe ich es dann mit einem counter probiert. Vielleicht habe ich etwas anderes falsch gemacht, ich werd es auf jeden Fall mal testen. Vielen Dank für die Hilfe, ich melde mich wieder, wenn es schwere Probleme gibt.
 
Mit einem BufferedInputStream oder BufferedReader könntest du vielleicht nochmehr Geschwindigkeit rauspressen.
 
Na dann mal zur Erlärung:

Wenn Du mehrere Strings miteinander mittels '+' aneinander hängen willst, so werden "intern" immer neue Objekte erzeugt:

So wird aus
Code:
x = "a" + 4 + "c"
folgendes:
Code:
x = new StringBuffer().append("a").append(4).append("c").toString()
. (vgl. auch API) Das heißt mit jedem '+' (bei 1MB sind das ne ganze Menge) wird ein neuer Stringbuffer erzeugt.
Wenn Du selbst einen Stringbuffer erzeugst und die append-Methode aufrufst, so entfallen unzählige Objekt-Erzeugungen.
 
Achso, jetzt verstehe ich den Hintergrund!
Ich danke euch vielmals für die Erklärungen!
Und danke auch an Beni, den BufferedInputStream werde ich auch noch ausprobieren!
Ich versuche das Programm damit so schnell wie möglich zu machen.
Gibt es weitere Möglichkeiten, diese Geschwindigkeit zu maximieren?(also besondere Klasse und Tricks?)
 
Warum überhaupt BMP als String? :roll:

Code:
BufferedInputStream in = null;
ByteArrayOutputStream out = null;
try {
  File f = new File("whatever.bmp");
  in     = new BufferedInputStream(new FileInputStream(f));
  out    = new ByteArrayOutputStream((int)f.length());
  byte buffer[] = new byte[2048];
  int bytesRead;
  while((bytesRead = in.read(buffer)) != -1)
    out.write(buffer, 0, bytesRead);

  ...
}
catch (Exception e) {
  e.printStackTrace();
}
finally {
  if (in != null) try { in.close(); } catch (Exception e) { e.printStackTrace(); }
}
 
Naja, ich schreibe ein Steganographieprogramm. Ich muss jede Art von Dateien zerlegen, chiffrieren, vllt. komprimieren, etc.. BMP war nur ein Beispiel, da ich gerade keine größere Datei hatte, als ein leeres, weißes Bitmap.
Allerdings muss ich als Trägerdatei die Bitmapdatei öffnen. Wie funktioniert diese ImageIO#read methode? Genauso wie die anderen, oder weist sie besondere Merkmale auf?
 
wenns Text ist nimm einen BufferedReader und mach in einem Stringbuffer append(br.readLine())

noch schneller vielleicht mit der java.nio.*
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben