FileWriter zu laaaaaaaaaaaam

Status
Nicht offen für weitere Antworten.
C

Christian76

Gast
Hallo,

ich habe eine Frage zum Schreiben von Daten in Datein.
Ich habe teilweise sehr große Stings (mehrere MB) und das Schreiben
mit dem FileWriter dauert eine Ewigkeit. Gib es eine schnellere Alternative?

Code:
                   try
                   {
                        FileWriter FW1 = new FileWriter("Ausgabe.txt");
                    
                        FW1.write("blah");
                    
                        FW1.close();

                   }
                   catch(Exception ef)
                   {

                   }

Gruß
-Christian
 
G

Guest

Gast
mmmmh, ich hätte es mir eigentlich denken können. :)

Wiedermal dank dir!
 

The_S

Top Contributor
Diese Klassen müssen natürlich richtig angewand werden, ansonsten sind sie nicht schneller als ein FileWriter/FileReader!
 
G

Guest

Gast
jetzt machst du mich aber neugierig. Also ich kenne den Gebrauch davon nicht, hast du vielleicht ein Beispiel?
 

The_S

Top Contributor
Naja, wenn du mit diesen Klassen jedes Byte einzeln liest/schreibst, haste keine Geschwindigkeitssteigerung, denn so macht das FileWriter/Reader auch. Das "Geheimnis" liegt daran mehrere bytes aufeinmal zu lesen/zu schreiben. Die entsprechenden Methoden findest du in dem API bzw. durch die Forensuche, gibt zig Beispiele dazu ;) .
 
S

SlaterB

Gast
es ist genau andersrum:
sei n die Buffer-Größe

wenn du n Bytes liest bringt der n-Buffer gar nix,
dann muss pro Lesevorgang auf die Festplatte zugegriffen werden,
beide Reader/Writer gleich schnell (der BufferedReader verwendet ja intern den FileReader),

nur beim Einzellesen macht der Buffer Sinn,
der liest n Zeichen sofort und greift für n reads nur n-mal auf den Hauptspeicher zu,
während ungebuffert n-mal die Festplatte bemüht wird
 

The_S

Top Contributor
Und was sagt dein Post jetzt anderes als meiner? ???:L

[edit] Bzw. irgendwie versteh ich deinen Post nicht. Widersprichst du dir mit dem 2. Absatz nicht in Bezug auf den 1. Absatz selbst? :bahnhof:
 
S

SlaterB

Gast
du sagst, dass bei Lesen einzelner Bytes beide Reader gleich schnell sind,
das ist falsch, durch den Buffer wird das ganze x-fach schneller

du sagst, dass bei Lesen von einem Byte-Array der BufferedReader schneller sind,
das ist falsch, der Buffer nützt wenig bis gar nix wenn man viele Daten einliest

deshalb: genau andersrum
 

The_S

Top Contributor
SlaterB hat gesagt.:
du sagst, dass bei Lesen einzelner Bytes beide Reader gleich schnell sind,
das ist falsch, durch den Buffer wird das ganze x-fach schneller

OK, das war ungünstig ausgedrückt von mir. Nächstes mal schreibe ich lieber 2 deutliche Sätze, als einen zusammengewurstelten :oops: ;) .

SlaterB hat gesagt.:
du sagst, dass bei Lesen von einem Byte-Array der BufferedReader schneller sind,
das ist falsch, der Buffer nützt wenig bis gar nix wenn man viele Daten einliest

Also entweder hab ich diese Aussage immer noch nicht verstanden, oder kann sie durch diesen Beispiel-Code widerlegen ;) .

Code:
		File f = new File("C:\\wtp-R-1.5.4-200705021353.zip");
		BufferedReader read = new BufferedReader(new FileReader(f));
		BufferedReader buffy = new BufferedReader(new FileReader(f));
		long temp = System.currentTimeMillis();
		while (buffy.read(new char[1024]) != -1);
		buffy.close();
		System.out.println(System.currentTimeMillis() - temp);
		temp = System.currentTimeMillis();
		while (read.read() != -1);
		read.close();
		System.out.println(System.currentTimeMillis() - temp);

Ausgabe:

1141
3267
 
S

SlaterB

Gast
wie gesagt abhängig von Verhälnis der Größe des gelesenen Arrays und des Buffers

Array so groß wie Buffer -> gleich schnell,
Array 1/3 so groß wie Buffer -> 3x schneller (dein Beispiel)
1 Byte lesen -> 1/3000 des Buffers -> 3000x schneller

ungeprüft und idealisiert dargestellt ;)

letztlich könnte mach auch das Einzellesen als Array der Länge 1 betrachten ;)
deshalb meinte ich mit meinem Satz nur große Array-Lese-Vorgänge
 

The_S

Top Contributor
Äh, das Array ist der Buffer ... ???:L .

Du siehst ja selbst durch meinen kleinen Test den Unterschied zwischen byte-für-byte lesen und mit buffer lesen ...

Irgendwie bin ich gerade extrem verwirrt :bahnhof:
 
S

SlaterB

Gast
okok, da hast du jetzt was anderes gemeint, hab mir dein Beispiel nicht genau genug angschaut,
also:

wenn man ein großes byte-Array einließt, dann ist es egal,
ob direkt aus dem FileReader oder aus dem BufferedReader

nur fürs Einzel-Byte-Lesen macht es einen entscheidendenen Unterschied, welche Reader-Klasse man benutzt,


dass byte-Array-Einlesen immer besser als Einzel-Byte-Lesen ist, unabhängig vom Reader, das sehe ich auch so ;)
 

The_S

Top Contributor
Ham wir wohl aneinander vorbeigeredet, und im Grunde so ziemlich das Selbe gemeint ;)

SlaterB hat gesagt.:
dass byte-Array-Einlesen immer besser als Einzel-Byte-Lesen ist, unabhängig vom Reader, das sehe ich auch so ;)

genau das sollte eigentlich die Aussage meines Postings sein, nicht mehr und nicht weniger!
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
KaffeeFan FileWriter nur leere Zeilen beschreiben Allgemeine Java-Themen 3
A Swing FileWriter schreibt keine Daten in Datei Allgemeine Java-Themen 13
L Filewriter schreibt Zahlen in Textdatei Allgemeine Java-Themen 2
R Encoding FileWriter Allgemeine Java-Themen 1
K FileWriter / FileReader Allgemeine Java-Themen 12
B FileWriter / FileReader testen / Mock-Objekt für Unit Tests? Allgemeine Java-Themen 6
G Mit FileWriter in Textdatei über jar Allgemeine Java-Themen 4
V FileWriter und Zahlen (Kein Problem, nur Verständnisfrage) Allgemeine Java-Themen 4
I Filewriter ignoriert Zeilenumbrüche Allgemeine Java-Themen 4
E Umlaute: FileWriter vs. FileOutputStream Allgemeine Java-Themen 3
V Unterschied FileOutputStream und FileWriter? Allgemeine Java-Themen 8
H Frage zu FileWriter Allgemeine Java-Themen 12
D FileWriter, PrintWriter und wie sie alle heißen. Allgemeine Java-Themen 13
S Problem!FileWriter Allgemeine Java-Themen 3
H Dateien lesen und schreiben mit Filereader und Filewriter Allgemeine Java-Themen 2
G Problem mit FileWriter Allgemeine Java-Themen 7
H Mit filewriter farbigen text schreiben? Allgemeine Java-Themen 7
S FileWriter PrintWriter Allgemeine Java-Themen 5
G Mit FileWriter Zeilenumbruch schreiben Allgemeine Java-Themen 8

Ähnliche Java Themen

Neue Themen


Oben