BufferedWriter voll?

Status
Nicht offen für weitere Antworten.

K-Man

Bekanntes Mitglied
Hallo
Ich habe eine Methode, die einen Stream Zeilenweise mit Daten füttert. Es handelt sich bei meinem Beispiel um eine Sequenz von knapp 600.000 Zeichen.

Hier der Code:
Code:
	public void printSeqInFastaFormat(OutputStream os) throws IOException
	{
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(os));
		bw.write(">" + getName());
		bw.newLine();
		
		if(getSequence().length() > 60)
		{
			int n = getSequence().length() / 60;
			
			for(int i = 0; i <= n; i++)
			{
				if(i == n)
				{
					bw.write(getSequence().substring(i*60));
					break;
				}
				bw.write(getSequence().substring(i*60, (60*i)+60));
				bw.newLine();
			}
			bw.flush();
		}		
	}

Meine Frage:
Warum brauch ich am Ende der Schleife ein flush? Ohne dem flush gibt er mir ungefähr 450.000 Zeichen aus und hört immer an der selben Stelle auf. Nur mit dem flush wird der komplette String ausgegeben. Kann es sein, dass der Puffer irgendwann voll ist und der Stream nichts mehr aufnimmt? Aber da ich ja die Zeichen Zeilenweise schreibe, dachte ich mir, dass es eh kein Problem geben dürfte...

Edit:
getSequence ist eine Methode, die mir die 600.000-Zeichen-Sequenz leifert..
 

Bleiglanz

Gesperrter Benutzer
du kannst auch close() schreiben, das ist eh Pflicht

flush deswegen, weil das ding ja BUFFEREDWriter heisst, d.h. nicht jedes Byte sofort losgeschickt (Festplatte, Netzwerk) wird sondern erst mal gesammelt

wenn er gerade keine Lust hat, wird er erstmal einen Haufen im RAM ansammeln und dann ganze Brocken auf einmal wirklich rausschreiben
 

K-Man

Bekanntes Mitglied
close hab ich schon, da ich aber den Stream übergebe, will ich den Stream nicht über die Methode schließen. Das macht die Klasse, die den Stream erzeugt. Ich weiß nicht, wie ich den Sream einfach wieder öffnen kann. Es gibt ja keine open-Methode. Da hab ich unter Netzwerkprogrammierung eh ne Frage gestellt.

Das mit dem Buffered hab ich schon verstanden. Ich versteh nur nicht, warum er den Rest nicht mehr ausgibt. Er schreibt wie gesagt ein paar Zeilen (die ersten ca. 450.000 Zeichen) und hört dann komplett auf...
 

Bleiglanz

Gesperrter Benutzer
er hört einfach auf?

was macht denn eigentlich das break? mach davor ein flush, wenns denn unbedingt so sein soll?
 

K-Man

Bekanntes Mitglied
Bleiglanz hat gesagt.:
er hört einfach auf?

was macht denn eigentlich das break? mach davor ein flush, wenns denn unbedingt so sein soll?
Das ist ja genau meine Frage. Ich brauch eben dieses flush, damit alles ausgegeben wird. Ich versteh nur nicht, warum er ohne dem flush nicht alles ausgibt.
Das break sagt einfach, dass er aufhören soll, nachdem die letzte Zeile ausgegeben wurde. Danach kommt eh schon der flush...
 

The_S

Top Contributor
Dann Versuchs ich mal zu erklären ;).

Der BufferedWriter "sammelt" so viele Daten an, bis er voll ist => Dann schreib er sie, damit nicht jedes Byte einzeln geschrieben werden muss.

Wenn jetzt nicht genug Daten geschrieben werden sollen, sodass der Buffer voll wird, wartet der BufferedWriter bis noch weitere Daten dazukommen (bis er eben voll ist). Möchtest du jetzt die Daten schreiben, ohne dass der Buffer zwingend voll sein muss, so setzt du ein flush bzw. close.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
Splayfer Problem mit BufferedWriter Allgemeine Java-Themen 3
C BufferedReader/BufferedWriter schreibt nicht alle Bytes Allgemeine Java-Themen 2
B Input/Output BufferedWriter/Reader replace line Allgemeine Java-Themen 6
G Probleme mit BufferedWriter und URL Allgemeine Java-Themen 4
B BufferedWriter in InputStream oder Zeichen-Stream in Byte-Stream Allgemeine Java-Themen 5
W Problem mit BufferedWriter Allgemeine Java-Themen 13
J BufferedWriter schreibt von selbst ein "" Allgemeine Java-Themen 12
J IOException durch BufferedWriter.flush() ? Allgemeine Java-Themen 5
G Zeilenumbruch beim BufferedWriter? Allgemeine Java-Themen 3
R Problem mit BufferedWriter Allgemeine Java-Themen 4
E BufferedWriter irgendwie klonen! Allgemeine Java-Themen 7
G Frage zum BufferedWriter Allgemeine Java-Themen 8
W BufferedWriter.write() schreibt nicht Allgemeine Java-Themen 3
C Problem mit BufferedWriter Allgemeine Java-Themen 7
K Arbeitsspeicher wird langsam voll Allgemeine Java-Themen 6
Luk10 CPU-Kern voll ausnutzen Allgemeine Java-Themen 17
F Klasse ohne voll qualifizierenden Namen laden Allgemeine Java-Themen 5
M Heap Speicher voll bei spezieller Resize Methode Allgemeine Java-Themen 5
M JVM Non-Heap läuft voll Allgemeine Java-Themen 4
S Auslagerungsdatei (Speicher) werde voll Allgemeine Java-Themen 2

Ähnliche Java Themen

Neue Themen


Oben