Methoden Verarbeitung von Größen Dateien

lenny89

Mitglied
Moin,

ich habe mir ein Programm geschrieben dass eine vorher ausgewallte Datei Zeilen weise einliest und die werte Verändert.
Das einlese von Dateien in der Größe von 0-3 MB beschied auch recht zügig.
Problem gibt es wenn Dateien größer (z.b. 20 MB) sind
dabei dauert das so extrem lange.
Das liegt wohl daran das ich die eingelesene und Veränderte Zeile in einer Variable speicher!?
Meine Frage bekommt man das auch irgendwie schneller hin?
kann ich die Datei schon schreiben/verändern beim einlesen ohne zwischenspeichern?

Code:
Java:
tempValue = "";
		  value = "";
		  glFD.setPBSizeMax((int)f.length());
		  glFD.clearPBSizeValue();
		  InputFile= new BufferedReader (new InputStreamReader(new FileInputStream(f.getAbsoluteFile())));           
          {
		    while((tempValue = InputFile.readLine()) != null) 
		   {
		      glFD.setPBSizeValue(tempValue.length());;
			  tempValue = tempValue.replaceAll("[A-Mn-z1-9]", "");
			  tempValue = tempValue.replaceAll("[N-Za-m._-]", "");
			  value = value + tempValue + "\r\n";
			}
			BufferedWriter f1= new BufferedWriter(new FileWriter(f));
			f1.write(value);
			f1.close();
			InputFile.close();
			glFD.setPBFileValue(1);

Danke im Voraus
lenny
 
B

Beni

Gast
Benutz die Klasse StringBuilder anstelle von
Code:
value = value + tempValue + "\r\n";
. Hintergrund: mit dem aktuellen Code kopierst du jedesmal alles was eingelesen wurde wenn du eine neuen Zeile hinten dran haengst. StringBuilder bietet Methoden wie "append" und "toString", welche dir hier helfen werden.
 

Michael...

Top Contributor
Eventuell kann man das ganze bei großen Dateien beschleunigen, wenn Du die Zeilen sofort wieder in ein zweite Datei schreibst (statt sie im Speicher zu halten) und anschließend umkopierst.
ja danke werde ich mal ausprobieren.
geht die klasse den auch beim einlesen von Hexwerten?(einlesen von z.b. Bilder, Mp3,...)
Ja, Hexwerte sind ja auch nichts anderes als Text und Zahlen.
Für Binäre Daten funktionieren Reader und Writer nicht, hier muss man dann direkt mit Streams z.B. DataIntput/DataOutputStream arbeiten.
 

Bernd Hohmann

Top Contributor
Das liegt wohl daran das ich die eingelesene und Veränderte Zeile in einer Variable speicher!? Meine Frage bekommt man das auch irgendwie schneller hin? Kann ich die Datei schon schreiben/verändern beim einlesen ohne zwischenspeichern?

Ja.

Dein Problem ist, dass (im Prinzip) bei jedem Anhängen der bestehende String in einen neuen String + etwas Luft fürs Anhängen umkopiert werden muss. Je größer der String, umso langsamer wird es.

Da nützt auch der Umstieg auf einen StringBuilder nichts, Operationen wie strA=strA+strB setzt der Compiler und spätestens die Runtime sowieso in eine ähnliche Konstruktion wie den StringBuilder um.

Du kannst aber problemlos Zeilenweise lesen und das über einen PrintWriter Zeilenweise wegschreiben in eine andere Datei wegschreiben, das sollte Dein Problem lösen.

Bermd
 

timbeau

Gesperrter Benutzer
Ich finds komisch, dass das so lange dauern soll. Der StringBuilder ist auf jeden Fall deutlich schneller als die Konkatenation von Strings. Hatten wir vor kurzem hier im Forum aber habs grade mal selber und hoffentlich halbwegs aussagekräftig getestet:

Java:
public static void main(String[] args) {
		String s = "";
		StringBuilder sb = new StringBuilder();
		
		
		/* warmlaufen */
		for (int i = 0; i < 10000; i++) {
			s = s + "a";
			sb.append("a");
		}
		
		/* reset */
		s = "";
		sb.setLength(0);
		
		long start = System.currentTimeMillis();
		/* Test */
		for (int i = 0; i < 100000; i++) {
			s = s + "a";
		}
		long stop = System.currentTimeMillis();
		
		System.out.println(stop - start);
		
		start = System.currentTimeMillis();
		/* Test */
		for (int i = 0; i < 100000; i++) {
			sb.append("a");
		}
		stop = System.currentTimeMillis();
		
		System.out.println(stop - start);
	}

Ergibt:
~10000 (String)
und
~10 (StringBuilder)
 

Bernd Hohmann

Top Contributor
Der StringBuilder ist auf jeden Fall deutlich schneller als die Konkatenation von Strings. Hatten wir vor kurzem hier im Forum aber habs grade mal selber und hoffentlich halbwegs aussagekräftig getestet

Das ist ja witzig... Ich war bis jetzt der festen Überzeugung dass der Java Compiler das ordentlich optimiert (dh vor der Schleife einen StringBuilder aufmacht und innerhalb der Schleifer nur .append(...) aufruft und erst am Ende das .toString() ausführt.

War das nicht mal so oder hatte ich da eine Halluzination?

Bernd
 

Ark

Top Contributor
War das nicht mal so oder hatte ich da eine Halluzination?
Du hattest eine Halluzination. :D

Der Compiler macht aus der Verkettung zweier String-Konstanten mittels + sofort eine entsprechende String-Konstante, die dann so auch in der class-Datei wieder auftaucht. Für eine Verkettung von Variablen (Strings) und (variablen/konstanten) Strings im Quelltext mit Hilfe des +-Operators erzeugt er Bytecode äquivalent zu [c]new StringBuilder().append(ersterString).append(zweiterString).toString()[/c] (oder so ähnlich, vor JDK 1.5 StringBuffer statt StringBuilder). Die [c]append()[/c]-Kette reißt ab, sobald die +-Kette im Quelltext abreißt.

Ark
 
M

maki

Gast
Schon mal einen Profiler wie zB. VisualVM probiert?

Alles andere ist nurgeraten/spekuliert wenn es um Performanceoptimierungen geht.

Spekuliert:
Vielleicht werden soviele Strings erzeugt dass der GC ständig läuft weil der Heap zu klein ist...
 

mla.rue

Bekanntes Mitglied
Java:
value = value + tempValue + "\r\n";
Je grösser die Variable wird, desto langsamer wird die ganze Sache (Value muss aus dem Speicher gelesen werden, X hinzugefügt und neuer Speicher zugewiesen werden, da ja grösser geworden). Benutz eine Liste oder Array pro Zeile und wenn die Datei wieder schreiben willst, gehst es Index für Index durch.

damit gehts natürlich auch
Java:
filewriter.writeLine(n, value);
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
N Einlesen einer Kostenmatrix, Verarbeitung mit Nearest Neighbor Allgemeine Java-Themen 1
H Frage sinnvolle Datenspeicherung und -verarbeitung Allgemeine Java-Themen 3
3 zeichenweise Verarbeitung aus Standardeingabe Allgemeine Java-Themen 3
A Effizienzfrage bei TreeSet / XML-Verarbeitung Allgemeine Java-Themen 8
B Problem bei Verarbeitung der URL Allgemeine Java-Themen 2
L Mir unerklärlicher StackOveflow bei RegExp-Verarbeitung Allgemeine Java-Themen 3
Androbin Drucken in Java - Größen- und Positionsprobleme Allgemeine Java-Themen 3
J Druckprobleme bei verschiedenen Schriftarten/-größen Allgemeine Java-Themen 7
W Vergleichstool für xml-Dateien Tortoise-svn Verknüpfung Allgemeine Java-Themen 2
W ICEpdf PDF-Dateien werden mit Java 21 nicht nicht mehr vollständig dargestellt Allgemeine Java-Themen 3
Thomasneuling Java Jar datei erstellen, von Projekt, dass auch Javafx Dateien, FXML Dateien und CSS Dateien, sowie Bilder enthält? Allgemeine Java-Themen 14
G Dateien lesen Allgemeine Java-Themen 3
OnDemand Unterschiedliche jar Dateien zusammen führen Allgemeine Java-Themen 8
A Sicheres Löschen von Dateien Allgemeine Java-Themen 7
O git ignore für Intellji braucht es die .idea Dateien? Allgemeine Java-Themen 8
Master3000 Dateien zwischen verschiedenen Netzwerken senden Allgemeine Java-Themen 17
L Jar Dateien in Classpath laden ab JDK 9+ Allgemeine Java-Themen 11
d.lumpi JDA eclipse dateien versenden Allgemeine Java-Themen 4
O Produziert das Tool "jpackage" (ab JDK 14) .exe Dateien, die auf einer Zielumgebung ohne JRE lauffähig sind ?` Allgemeine Java-Themen 7
O Wie kann ich in Apache POI (Excel Dateien schreiben) Datumszellen in Excel erzeugen Allgemeine Java-Themen 6
T Meine Frage lautet wie ich 2 CSV Dateien miteinander in Java verbinde und Spalten die zueinander gehören durch den gleichen Key zusammen ausgebe? Allgemeine Java-Themen 5
L Dateien richtig auslesen Allgemeine Java-Themen 6
L Eclipse Runnable Jar mit Dateien Allgemeine Java-Themen 8
W Server-Thread schreibt nicht alle Dateien Allgemeine Java-Themen 6
MiMa Logging mit log4j2 in verschiedene Dateien? Allgemeine Java-Themen 22
I Klassen aus Jar-Dateien aus anderem Ordner laden Allgemeine Java-Themen 3
O jar und EXE Dateien, Pfade zur Laufzeit Allgemeine Java-Themen 1
W Dateien werden nicht gelöscht - warum? Allgemeine Java-Themen 12
B Dateien / Bilder von "webapp" Ordner bekommen? Allgemeine Java-Themen 1
P Erste Schritte Dateien löschen Allgemeine Java-Themen 4
H Erste Schritte Ausführbare Dateien lassen sich nicht starten Allgemeine Java-Themen 5
I Java als exe veröffentlichen inkl. kompletter Dateien Allgemeine Java-Themen 4
M Drucken von Dateien Allgemeine Java-Themen 10
J jar Dateien unter Windows 7 mit spezifischer jdk öffnen Allgemeine Java-Themen 2
I Laden von Informationen aus Dateien: Austauschbarkeit: 2 Dateien sinnvoll? Allgemeine Java-Themen 2
N Temporäre Dateien Allgemeine Java-Themen 3
Bluedaishi Druck Probleme mit PDF dateien Allgemeine Java-Themen 4
M Dateien schneller kopieren Allgemeine Java-Themen 1
M Dateien nach kopieren vergleichen Allgemeine Java-Themen 9
Arif Input/Output Dateien im Jar-Programm speichern Allgemeine Java-Themen 12
D Collections.sort funktioniert nicht in exportierten .class Dateien Allgemeine Java-Themen 10
K Große JSON-Dateien schnell und effizient verarbeiten Allgemeine Java-Themen 16
J Programm zum Download von CSV-Dateien Allgemeine Java-Themen 4
V Eclipse .class Dateien Allgemeine Java-Themen 9
B Download von dateien Allgemeine Java-Themen 2
K Nicht alle class-Dateien im JRE? Allgemeine Java-Themen 2
MiMa Log4j in Dateien mit eigenem Namen schreiben Allgemeine Java-Themen 3
D Kopieren von Dateien aus einem Ordner in einen anderen Allgemeine Java-Themen 6
C Dateien in Jar aufrufen Allgemeine Java-Themen 14
X NetBeans Bilder und andere Dateien ins .jar schreiben und wieder aus .jar lesen Allgemeine Java-Themen 6
JavaWolf165 Externe .jar-Dateien in .jar-Datei intigrieren Allgemeine Java-Themen 0
X Dateien für Benutzer Sperren Allgemeine Java-Themen 4
D Dateien aus den Internet herunterladen Allgemeine Java-Themen 6
L Methoden Dateien älter als 30 Tage? Allgemeine Java-Themen 11
J .exe Dateien werden nicht gestartet obwohl Pfad richtig Allgemeine Java-Themen 6
RalleYTN Classpath Native Dateien(DLL, SO, JNILIB) Allgemeine Java-Themen 2
J Java .jar Dateien zusammenführen Allgemeine Java-Themen 1
L Best Practice Log Dateien analysieren und eventuell passende Daten am Chart darstellen Allgemeine Java-Themen 1
F Platzsparende Alternative zu .txt-Dateien Allgemeine Java-Themen 12
X Dateien von der Jar zum Ordner kopieren. Allgemeine Java-Themen 4
Ananaskirsche Input/Output Dateien im Ordner Allgemeine Java-Themen 8
A Input/Output Liste der Dateien in einem Ordner in einer Jar Datei erhalten Allgemeine Java-Themen 11
X Herunterladen von Dateien aus dem Internet Allgemeine Java-Themen 2
V Input/Output Sound Dateien aus Jar laden Allgemeine Java-Themen 18
M Dateien aus einem Verzeichnis auf einem Server auflisten Allgemeine Java-Themen 5
H PDFBox akzeptiert Dateien nicht Allgemeine Java-Themen 1
B Java - einlesen von Dateien und herausschneiden von XML Dokumenten Allgemeine Java-Themen 5
A Input/Output Spätes Schreiben von Dateien der JVM Allgemeine Java-Themen 3
M Zwei unterschiedliche JAR Dateien mit ANT erstellen Allgemeine Java-Themen 8
Thallius Dateien Zippen und wieder heraus lesen? Allgemeine Java-Themen 4
T Dateien zur Laufzeit in Java-Programm packen? Allgemeine Java-Themen 3
Maxim6394 Jar Dateien starten nicht Allgemeine Java-Themen 7
U Eclipse Java Programm beschädigt .tar.gz dateien beim Entpacken Allgemeine Java-Themen 7
GUI-Programmer Mp3 Dateien bearbeiten und speichern Allgemeine Java-Themen 3
S Exklusive Sperre auf Dateien: FileChannel, FileLock Allgemeine Java-Themen 0
Bluedaishi Dateien löschen die älter als das aktuelle Datum sind Allgemeine Java-Themen 9
OnDemand Dateien einlesen und vergleichen Allgemeine Java-Themen 1
T Ordner samt Dateien kopieren Allgemeine Java-Themen 11
R Importieren von Txt-Dateien in AbstractTableModel Allgemeine Java-Themen 0
C Dateien komprimieren und verschlüsseln Allgemeine Java-Themen 3
F Eclipse Eclipse kompiliert nicht mehr die aktuellen Dateien Allgemeine Java-Themen 2
R Java Dateien "verschlüsseln" Allgemeine Java-Themen 2
L Passwortgeschützte Dateien Allgemeine Java-Themen 6
A Datentypen Dateien umbenennen mit Dateiendungen - Dateiendungen ausgeben Allgemeine Java-Themen 2
L Reparieren beschädigter PDF Dateien Allgemeine Java-Themen 3
F Dateien ins Array lagern und Optionen zur Auswahl, Allgemeine Java-Themen 5
J XML Dateien vergleichen Allgemeine Java-Themen 9
B Umbenennen von Dateien Allgemeine Java-Themen 2
B Erste Schritte Plugin erkennen und Class Dateien anzeigen lassen Allgemeine Java-Themen 3
W Best Practice Dateien parsen Allgemeine Java-Themen 3
B Dateien verschwinden aus bin Ordner?! Allgemeine Java-Themen 5
B Dateien prüfen auf Gleichheit Allgemeine Java-Themen 5
M Java Dateien verschieben Allgemeine Java-Themen 2
R Wav-Dateien wiederholt abspielen Allgemeine Java-Themen 2
B Alt-Griechisch Zeichen in Dateien Allgemeine Java-Themen 2
M JAR Dateien nur mit Compiler Level 1.6 ausführbar Allgemeine Java-Themen 8
E Zugriff auf Dateien im Filesystem überwachen Allgemeine Java-Themen 5
G .jar Dateien lassen sich nicht mehr öffnen Allgemeine Java-Themen 2
M Datentypen Jar-Dateien öffnen nicht mit Java Allgemeine Java-Themen 4
C Mit Java PDF Dateien bearbeiten. Allgemeine Java-Themen 2

Ähnliche Java Themen


Oben