BufferedReader/Writer trotz Cache?

Status
Nicht offen für weitere Antworten.

kirdie

Bekanntes Mitglied
So wie ich das verstanden habe, puffert der BufferedReader/Writer Dateizugriffe, um die Geschwindigkeit zu erhöhen.

Allerdings hat doch jedes Betriebssystem einen Lese- und Schreibcache für Festplatten, bringt es da wirklich noch etwas, den BufferedReader/-Writer zu benutzen? Ist das nur dafür da, wenn man über ein Netzwerk oder eine Flashkarte oder irgendsoetwas liest oder schreibt?
 

Landei

Top Contributor
Probiers doch einfach aus: Kopiere eine größere Datei und nimm mit System.currentTimeMillis die Zeit.

BufferedReader und -Writer sind vor allem auch bequemer: Ich weiß ja nicht, wie du das hältst, aber ich schlage mich eher ungern mit einzelnen chars herum...
 
G

Gelöschtes Mitglied 5909

Gast
du kannst ja mal die windoof / linux read() bzw _read() funktion in c/c++ verwenden und 10MB lesen. Da kannst du ne weile warten ohne Puffer.
 

kirdie

Bekanntes Mitglied
@Landei: Naja, unbequemer finde ich z.B. den Scanner oder den PrintWriter nicht unbedingt. Aber ich habe es mal getestet. Ergebnis: Das schreiben ist gleichschnell aber der Lesevorgang ist ungepuffert viel langsamer.

Aber meine eigentliche Frage bleibt ja unbeantwortet:
Warum hilft der Lesecache da nicht?

Java:
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.util.Scanner;

public class Main {

	public static void main(String[] args) throws IOException
	{
		// Write
		long start;
		long end;
		long elapsedTime;

		PrintWriter[] out =
		{
				new PrintWriter("test.txt"),
				new PrintWriter(new BufferedWriter(new FileWriter("test.txt")))
		};

		for(int writerNr=0;writerNr<out.length;writerNr++)
		{
			start = System.currentTimeMillis();

			for(int i=0;i<1000*1000;i++) out[writerNr].println("test"+i);

			end = System.currentTimeMillis();
			elapsedTime = end-start;
			System.out.println((writerNr==0?"un":"")+"buffered write time in milliseconds: "+elapsedTime);
		}

		// Read scanner
		Scanner scanner = new Scanner(new File("test.txt"));		

		start = System.currentTimeMillis();

		while(scanner.hasNextLine()) scanner.nextLine();

		end = System.currentTimeMillis();
		elapsedTime = end-start;
		System.out.println("unbuffered scanner read time in milliseconds: "+elapsedTime);

		// Read BufferedReader
		BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(new FileInputStream("test.txt")));
		start = System.currentTimeMillis();

		while(bufferedReader.readLine()!=null);

		end = System.currentTimeMillis();
		elapsedTime = end-start;
		System.out.println("BufferedReader read time in milliseconds: "+elapsedTime);
	}
}

Ausgabe
---------
unbuffered write time in milliseconds: 703
buffered write time in milliseconds: 641
unbuffered scanner read time in milliseconds: 2437
BufferedReader read time in milliseconds: 220


P.S.: Ich habe auch folgendes probiert, mit ähnlichen Resultaten:

Java:
Writer[] out =
		{
				new PrintWriter("test.txt"),
				new BufferedWriter(new FileWriter("test.txt"))
		};
[...]
		for(int i=0;i<1000*1000;i++) out[writerNr].write("test"+i+"\n");

Ausgabe
---------
unbuffered write time in milliseconds: 594
buffered write time in milliseconds: 422
unbuffered scanner read time in milliseconds: 2531
BufferedReader read time in milliseconds: 251
 
S

SlaterB

Gast
wer weiß, ohne Lesecache wäre es vielleicht 10 Sek statt 2.5,
ohne Testmöglichkeit kann man ja kaum entscheiden, ob er hilft oder nicht,
vielleicht hilft er auch besonders beim gleichzeitigen Lesen mehrere Dateien oder oder oder

ein Scanner hat übrigens auch einen internen Buffer von 1024, der sollte eigentlich nicht langsam sein :rolleyes:

edit auch mit makis Hinweis:
vielleicht hilft hier gerade der Cache, dass der zweite Lesevorgang schneller ist,
tausche die doch mal um, dann ist vielleicht der Scanner scheinbar schneller
 
Zuletzt bearbeitet von einem Moderator:
M

maki

Gast
cache != buffer

Sieh dir mal die Definition von beidem an, dir sollte etwas auffallen ;)

Abgesehen davon sind Dateien traditionell sog. "Blockorientierte" Geräte, man kann nicht nur ein einzelnes Byte auf eine Festplatte schreiben, sondern immer nur einen ganzen Sektor, beim lesen genauso.
Bildschirm und Tastatur sind dagegen Zeichenorientierte Geräte, zumindest klassisch gesehen.
 
S

SlaterB

Gast
da beim Lesen immer große Blöcke von paar KB in den Cache gelangen, ist er doch quasi auch ein Buffer, oder? ;)
 
S

Spacerat

Gast
Vor allen Dingen existiert der IO-Cache nur innerhalb des BS. Sogar in BS nahen Sprachen wo man direkten Zugriff auf den Cache haben könnte, wird dringend empfohlen, seine Daten nicht direkt aus diesem zu lesen, sondern eben selbst zu Puffern. Die JVM verwendet deswegen mit absoluter Sicherheit auch die Schreib- / Leseroutinen des jeweiligen BS. BufferedStream bzw. -Reader machen deswegen Sinn, um bereits in die JVM geladene Daten eben dort zu erhalten und nicht erneut vom BS anfordern zu müssen.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
berserkerdq2 Brauche ich while != -1, wenn ich immer einen BufferedReader verwende? Java Basics - Anfänger-Themen 8
S Erklärung BufferedReader und InputStreamReader Java Basics - Anfänger-Themen 4
Dimax BufferedReader.readLine().length() wirft NullPointer Java Basics - Anfänger-Themen 6
K Verständnisfrage Server/Client BufferedReader, PrintWriter Java Basics - Anfänger-Themen 2
M BufferedReader begrenzen Java Basics - Anfänger-Themen 3
M Java: BufferedReader liest nur die Hälfte der Text-Datei. Java Basics - Anfänger-Themen 4
O BufferedReader - Endlos Schleife Java Basics - Anfänger-Themen 2
K BufferedReader für IOTools ersetzen? Java Basics - Anfänger-Themen 17
M BufferedReader neue Zeile nach Knopfdruck Java Basics - Anfänger-Themen 9
H Unterschied BufferedReader und BufferedInputStream Java Basics - Anfänger-Themen 4
S BufferedReader TextFields Import Java Basics - Anfänger-Themen 5
B BufferedReader gibt Datei-Inhalt doppelt aus Java Basics - Anfänger-Themen 3
S BufferedReader nächste Zeile lesen Java Basics - Anfänger-Themen 4
E Erste Schritte txt.Datei mit BufferedReader einlesen und in 2D-Array abspeichern Java Basics - Anfänger-Themen 15
A Textdatei mit BufferedReader einlesen Java Basics - Anfänger-Themen 0
P Einlesen von Daten via BufferedReader Java Basics - Anfänger-Themen 4
S Einlesen BufferedReader Java Basics - Anfänger-Themen 5
D BufferedReader/InputStreamReader/Split Java Basics - Anfänger-Themen 2
M bufferedreader loop stoppen Java Basics - Anfänger-Themen 2
HoloYoitsu BufferedReader verhält sich seltsam Java Basics - Anfänger-Themen 10
I BufferedReader Text-Datei einlesen??? Java Basics - Anfänger-Themen 1
J Scanner & BufferedReader Java Basics - Anfänger-Themen 3
D Hilfe bei FileReader und BufferedReader Java Basics - Anfänger-Themen 2
V Fehlerhafte BufferedReader/switch Benutzung? Java Basics - Anfänger-Themen 2
L 2x BufferedReader in einem Programm Java Basics - Anfänger-Themen 1
K Einlesen einer txt von BufferedReader klappt nicht wie gewünscht Java Basics - Anfänger-Themen 12
N BufferedReader Java Basics - Anfänger-Themen 19
N Erste Zeile bei BufferedReader doppelt lesen? Java Basics - Anfänger-Themen 2
P Interpreter-Fehler Probleme mit java.io.BufferedReader Java Basics - Anfänger-Themen 6
M BufferedReader => TextField/Label Java Basics - Anfänger-Themen 8
B Input/Output Benutzereingabe mit BufferedReader Java Basics - Anfänger-Themen 7
B Erste Schritte BufferedReader mag nicht so recht Java Basics - Anfänger-Themen 4
B Input/Output Probleme mit BufferedReader Java Basics - Anfänger-Themen 4
J BufferedReader in Integer konvertieren Java Basics - Anfänger-Themen 7
T Input/Output StructuredFileReader extends BufferedReader Java Basics - Anfänger-Themen 6
P BufferedReader - als String[] speichern ? Java Basics - Anfänger-Themen 5
H Problem mit Regex in Verbindung mit BufferedReader Java Basics - Anfänger-Themen 4
J InputStreamReader + BufferedReader - keine Eingabemöglichkeit Java Basics - Anfänger-Themen 10
G Hilfe bei BufferedReader Java Basics - Anfänger-Themen 4
A Methoden BufferedReader durchzählen dann lesen Java Basics - Anfänger-Themen 11
T BufferedReader mehrere Zeilen einlesen Java Basics - Anfänger-Themen 4
S Erste Schritte Frage bezüglich "BufferedReader" Java Basics - Anfänger-Themen 3
A BufferedReader mit geöffneter Datei Java Basics - Anfänger-Themen 4
M Eigener InputStream will nicht mit BufferedReader Java Basics - Anfänger-Themen 3
H BufferedReader Zeilenauslesen & verwenden Java Basics - Anfänger-Themen 4
S BufferedReader liest was anderes als BufferedWriter schreibt Java Basics - Anfänger-Themen 5
F Eingabe von Ganzen Zahlen oder Strings mit BufferedReader Java Basics - Anfänger-Themen 10
D BufferedReader und .split() Java Basics - Anfänger-Themen 3
C BufferedReader Java Basics - Anfänger-Themen 5
C Datentypen BufferedReader Java Basics - Anfänger-Themen 6
c_sidi90 BufferedReader Benzinverbrauch Java Basics - Anfänger-Themen 7
Antoras Datei laden mit BufferedReader sehr langsam Java Basics - Anfänger-Themen 7
J Bufferedreader nich von anfang an. Java Basics - Anfänger-Themen 14
M Position des BufferedReader Java Basics - Anfänger-Themen 6
J Socket - BufferedReader lese Problem Java Basics - Anfänger-Themen 2
U BufferedReader - mark Java Basics - Anfänger-Themen 6
Hamstinator Frage zu BufferedReader/FileReader Java Basics - Anfänger-Themen 4
MEETyA Zeilenumbrüche fehlen nach BufferedReader Java Basics - Anfänger-Themen 3
S BufferedReader in Methode übergeben Java Basics - Anfänger-Themen 2
C BufferedReader und FileWrite Java Basics - Anfänger-Themen 2
G Frage zu BufferedReader readline() Java Basics - Anfänger-Themen 3
M BufferedReader.readline() Unix/Windows Zeilenumbruch Java Basics - Anfänger-Themen 4
K zwei Funktionen, ein BufferedReader? Java Basics - Anfänger-Themen 8
K BufferedReader im Konstruktor // guter Stil ? Java Basics - Anfänger-Themen 2
hdi FileReader / BufferedReader langsam? Java Basics - Anfänger-Themen 3
N BufferedReader Verständnisproblem Java Basics - Anfänger-Themen 12
M Problem mit BufferedReader. Java Basics - Anfänger-Themen 10
N Probleme mit dem BufferedReader Seitenquelltext auszulesen Java Basics - Anfänger-Themen 6
G BufferedReader Problem Java Basics - Anfänger-Themen 5
G Probleme mit BufferedReader Java Basics - Anfänger-Themen 6
E Was ließt der BufferedReader eigentlich ein? Java Basics - Anfänger-Themen 3
N Problem mit BufferedReader und close() Java Basics - Anfänger-Themen 6
T NullPointerException bei BufferedReader Java Basics - Anfänger-Themen 4
G bufferedReader -> String[] Java Basics - Anfänger-Themen 8
J NullPointerException BufferedReader.readLine() Java Basics - Anfänger-Themen 4
S java.io.* BufferedReader to String Java Basics - Anfänger-Themen 12
T BufferedReader oder Prozess, wer hängt sich auf? Java Basics - Anfänger-Themen 6
J bufferedReader liest zu wenig daten ein Java Basics - Anfänger-Themen 6
G BufferedReader Problem Java Basics - Anfänger-Themen 10
W Bestimmten Pfad im BufferedReader Java Basics - Anfänger-Themen 4
P BufferedReader / FileReader Key und Values Java Basics - Anfänger-Themen 7
K FileReader BufferedReader & Arrays Java Basics - Anfänger-Themen 14
G BufferedReader - split-Methode Java Basics - Anfänger-Themen 6
G Bufferedreader Java Basics - Anfänger-Themen 11
B BufferedReader für Char? Java Basics - Anfänger-Themen 6
K BufferedReader & BufferedWriter Java Basics - Anfänger-Themen 6
G BufferedReader Java Basics - Anfänger-Themen 6
V BufferedReader dann zusammenzählen Java Basics - Anfänger-Themen 3
G Hashset verknüpfen mit BufferedReader Java Basics - Anfänger-Themen 18
S BufferedReader (JFileChooser) Java Basics - Anfänger-Themen 2
P Komisches Verhalten von BufferedReader und readLine() Java Basics - Anfänger-Themen 2
R Probleme mit Bufferedreader Java Basics - Anfänger-Themen 11
R frage zur read()-Methode des BufferedReader Java Basics - Anfänger-Themen 2
M mit BufferedReader Zeile lesen Java Basics - Anfänger-Themen 11
L read() (von bufferedReader) abbrechen Java Basics - Anfänger-Themen 5
L unterbrechen von bufferedReader.read() Java Basics - Anfänger-Themen 4
R BufferedReader <-> InputStream Java Basics - Anfänger-Themen 3
G BufferedReader Java Basics - Anfänger-Themen 18
A BufferedReader Java Basics - Anfänger-Themen 6
C BufferedReader und BufferedWriter im Netzwerk Java Basics - Anfänger-Themen 6

Ähnliche Java Themen

Neue Themen


Oben