JTextArea beschleunigen bei großen Texten

Status
Nicht offen für weitere Antworten.

wanni

Mitglied
Ich hatte Probleme mit sehr großen Dateien (einige 10.000 Zeilen). Obwohl die JTextArea im allgemeinen
schneller ist als JTextPane, musste ich dennoch lange herumprobieren, bis ich die schnellste Lösung gefunden hatte.
Wenn jemand des Code noch schneller machen könnte, wäre ich sehr dankbar.

Hier meine Idee (für einen Text mit 10.000 Zeilen braucht es bis zum Anzeigen des Textes 0.5 sek):

Code:
public void loadFile(String sourcePath) {
          
          String line;
          
          
          if (sourcePath != "") {
              
              try
              {

                  FileReader fr = new FileReader(sourcePath); 
                  BufferedReader br = new BufferedReader(fr);
                  final String NL = System.getProperty("line.separator");
                  
                  StringBuffer buf = new StringBuffer();
                  
                  while ( (line = br.readLine()) != null) {
                      
                      buf.append(line + NL);
                  }       
                  
                  ta_code.setText(buf.toString());

              } 
              catch(IOException  e) {...} 
              catch(Exception  e) {...}
          }
      
      }
 
R

Roar

Gast
oO 0.5 sekunden für 10'000 zeilen ist nicht langsam.
du könntest anstatt buf.append(line + NL) NL extra hinzufpgen:
buf.append(line);
buf.append(NL);

vielleicht sparst du noch ein paar ms wenn du dem stringbuffer von vornherein die größe gibst die er braucht:
new StringBuffer(new File(sourcepath).length());
weiß aber nich ob das so geht *g

achja: ich würde vor dem ganzen lesen noch abfragen ob sourcepath nicht "" ist und so...
 

wanni

Mitglied
Danke für die Tips, ich habe sie gleich ausprobiert.
Du hattest recht, wenn man die Größe des StringBuffers vorher festlegt,
dann fällt die Erweiterung des Speichers jedesmal weg, wenn der Buffer zu klein geworden ist.

Das Problem ist nur, dass man die Größe der Datei vorher nicht kennt.
Weder das File Objekt noch der BufferedReader, der die Datei ja nur sequentiell ließt,
kann einem Auskunft darüber geben.

Wenn man allerdings vorher weiß wie groß die Datei ist und die Buffergröße festlegt,
bringt das bei 10.000 Zeilen eine Zeitersparnis von 0.1 Sek.

Ich glaube viel besser geht es im Moment mit Java nicht. Aber es reicht auch
völlig aus. Ich hoffe ich konnte mit dem Beitrag jemandem helfen,
der das gleiche Problem hatte.
 

wanni

Mitglied
Stimmt, so geht's. Danke.

Hier der Quellcode:


Code:
public void loadFile(String sourcePath) { 
          
          String line; 
          
          
          if (sourcePath != "") { 
              
              try 
              { 

                  File f = new File(sourcePath);
                  FileReader fr = new FileReader(sourcePath); 
                  BufferedReader br = new BufferedReader(fr);
                  final String NL = System.getProperty("line.separator");

                  StringBuffer buf = new StringBuffer((int)f.length());

                  while ( (line = br.readLine()) != null) { 
                      
                      buf.append(line + NL); 
                  }        
                  
                  ta_code.setText(buf.toString()); 

              } 
              catch(IOException  e) {...} 
              catch(Exception  e) {...} 
          } 
      
      }
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
H Swing JTextArea als TableCellRenderer in JTable - wie Zeilen selektieren? Allgemeine Java-Themen 47
B System.out Ausgabe auf jtextarea Fehlersuche Allgemeine Java-Themen 8
N Daten einer JCoTable in JTextArea anzeigen Allgemeine Java-Themen 7
T Resize JTextArea Allgemeine Java-Themen 3
L Text von txt auf JTextArea Allgemeine Java-Themen 4
B JTextArea 6 mal auf DinA4 Format verteilen und drucken Allgemeine Java-Themen 1
X System.out/err(Die Console) in JTextArea ausgeben Allgemeine Java-Themen 2
M Output einer anderen/externen .jar in eigene JTextArea Allgemeine Java-Themen 4
D JTextArea mit setBounds() Allgemeine Java-Themen 3
I JTextArea soll nur drei Zeilen anzeigen Allgemeine Java-Themen 1
F JTextArea Cursor in die nächste Zeile setzen Allgemeine Java-Themen 2
S Swing Text in eine JTextArea schreiben Allgemeine Java-Themen 17
Z Ausschneiden, Kopieren, Einfügen, Löschen in JTextArea Allgemeine Java-Themen 5
R via JButton in JTextArea printen Allgemeine Java-Themen 2
I Tab stop in jtextarea Allgemeine Java-Themen 2
X HTTP Problem mit static/non static JTextArea Update Allgemeine Java-Themen 17
E JTextArea / JEditorPane + Text formatieren Allgemeine Java-Themen 3
P JTextArea als Log umfunktionieren Allgemeine Java-Themen 5
H image in jtextarea/JLabel einbinden... Allgemeine Java-Themen 4
C Zeilenumbruch aus JTextArea entfernen Allgemeine Java-Themen 6
D Inhalt der JTextArea drucken Allgemeine Java-Themen 2
G Text aus Zwischenablage in JTextarea -> JDBC Error Allgemeine Java-Themen 3
Escorter Threads und JTextArea Allgemeine Java-Themen 2
G JTextArea auslesen Allgemeine Java-Themen 10
H Externe Prozesse und Inputstreams - ausgabe in JTextArea Allgemeine Java-Themen 3
O Datei in eine JTextarea reinladen Allgemeine Java-Themen 2
M JTextArea Allgemeine Java-Themen 2
C JTextArea clear! Allgemeine Java-Themen 4
M Tab und KeyListener in einer JTextArea Allgemeine Java-Themen 7
D Textdatei und JTextArea Allgemeine Java-Themen 5
G JTextArea vs JTextPane Allgemeine Java-Themen 2
G JTextArea im JScrollpane automatisch mitscrollen Allgemeine Java-Themen 4
G Fragen zu JTextField bzw. JTextArea Allgemeine Java-Themen 2
G Compiler Exception auf JTextArea umleiten Allgemeine Java-Themen 4
C Zeilenumbruch bei JTextArea Allgemeine Java-Themen 10
bernd Unterschiede von Ordnerstrukturen in JTextArea anzeigen Allgemeine Java-Themen 4
thE_29 Komponente beliebig in einer JTextArea platzieren Allgemeine Java-Themen 3
bummerland Zeilenumbruch aus JTextArea Allgemeine Java-Themen 1
V Kollisionserkennung beschleunigen/verbessern? :) Allgemeine Java-Themen 14
W Ausgabe beschleunigen? Allgemeine Java-Themen 3
K Wie kann ich einen BufferedReader beschleunigen? Allgemeine Java-Themen 4
m@nu Kopieren beschleunigen Allgemeine Java-Themen 3
C Laden von Dateien beschleunigen Allgemeine Java-Themen 5
B Sehr großen Graph mit Verbindungen bauen und minimieren? Allgemeine Java-Themen 35
N Bin to Dez und umgekehrt mit sehr großen Zahlen Allgemeine Java-Themen 2
T Modulo-Operator versagt bei zu großen Zahlen? Allgemeine Java-Themen 14
H Gibt es einen großen Unterschied zwischen Java 6 und Java 7? Allgemeine Java-Themen 3
R Panel mit 8 gleich großen "fenstern" Allgemeine Java-Themen 11
M Eclipse Stackoverflow beim Einlesen von großen Bilder in kd Baum Allgemeine Java-Themen 15
nrg Arbeiten mit sehr großen CSV Dateien Allgemeine Java-Themen 20
S Schnelles arbeiten mit großen CSV Dateien Allgemeine Java-Themen 4
K replaceAll bei sehr großen String Allgemeine Java-Themen 3
H2SO3- großen double in string mit e umwandeln Allgemeine Java-Themen 4
kb22 CMS mit großen Dateien (heap problem) Allgemeine Java-Themen 3
H2SO3- speichern von Daten in seeeeeehr großen Tabellen (nicht DB) Allgemeine Java-Themen 8
G Bringt es etwas System.gc() nach großen Aufgaben aufzurufen? Allgemeine Java-Themen 2
T Suche den großen Calendar Thread ! Allgemeine Java-Themen 2
U Kompilieren einer großen Datei if-else = StackOverflowError Allgemeine Java-Themen 4
G Lesen von sehr großen dateien Allgemeine Java-Themen 8
S Datenbank Abfragen mit großen Datenmengen Allgemeine Java-Themen 22
E String.replace für (sehr) großen Text Allgemeine Java-Themen 9
M String#equals(), Probleme mit großen Strings? Allgemeine Java-Themen 4
F Mehrere Bilder zu einem Großen zusammenkleben Allgemeine Java-Themen 3
R Was nehmen für Flußdiagramme und Druck von großen Grafiken Allgemeine Java-Themen 4
flashfactor Problem mit mehren großen Dateien Allgemeine Java-Themen 3

Ähnliche Java Themen

Neue Themen


Oben