DarthShader
Erfahrenes Mitglied
Hallo,
ich komme immer wieder ins Schleudern, wenn es um diese ganzen verschiedenen IO Klassen geht, wie PrintWriter, die Buffered Stream Klassen etc... oft weiß ich nicht, welche Klasse ich am besten einsetze.
Ich habe nun die Situation, dass es eine Methode gibt, innerhalb derer ich einen String in den übergebenen OutputStream schreiben möchte.
Das sieht folgendermaßen aus:
Mir stellt sich nun die Frage, warum ich pw.flush() machen muss (in einem Testprogramm ist der übergebene OutputStram "System.out" und ich sehe "Hello World" erst auf der Konsole, wenn ich pw.flush() aufrufe). Ist denn der PrintWriter auch gepuffert, obwohl es dafür extra BufferedXXX Klassen gibt?
Ist der code oben denn gut so? Oder sollte ich lieber einen BufferedWriter für soetwas verwenden, wie folgt:
Hier habe ich den PrintWriter durch einen BufferedWriter gewrappt. Um die Ausgabe auf der Konsole zu sehen, muss ich wieder bw.flush() machen. Das kann ich aber verstehen, der die Ausgabe wird ja gepuffert. Aber warum muss ich denn bei einem BufferedWriter eine IOException abfangen, und beim PrintWriter nicht?
Ist das 2. Codebeispiel besser, oder gibt es einen noch anderen Weg, quasi eine Best Practice? Wie würdet Ihr die Geschichte lösen?
Danke für Eure Hilfe!
ich komme immer wieder ins Schleudern, wenn es um diese ganzen verschiedenen IO Klassen geht, wie PrintWriter, die Buffered Stream Klassen etc... oft weiß ich nicht, welche Klasse ich am besten einsetze.
Ich habe nun die Situation, dass es eine Methode gibt, innerhalb derer ich einen String in den übergebenen OutputStream schreiben möchte.
Das sieht folgendermaßen aus:
Java:
public void write( OutputStream out )
{
PrintWriter pw = new PrintWriter( out );
pw.println( "Hello World" );
pw.flush();
}
Mir stellt sich nun die Frage, warum ich pw.flush() machen muss (in einem Testprogramm ist der übergebene OutputStram "System.out" und ich sehe "Hello World" erst auf der Konsole, wenn ich pw.flush() aufrufe). Ist denn der PrintWriter auch gepuffert, obwohl es dafür extra BufferedXXX Klassen gibt?
Ist der code oben denn gut so? Oder sollte ich lieber einen BufferedWriter für soetwas verwenden, wie folgt:
Java:
public void write( OutputStream out )
{
BufferedWriter bw = new BufferedWriter( new PrintWriter(out ) );
try
{
bw.write( "Hello World!" );
bw.flush();
}
catch ( IOException e ) { e.printStackTrace(); }
}
Hier habe ich den PrintWriter durch einen BufferedWriter gewrappt. Um die Ausgabe auf der Konsole zu sehen, muss ich wieder bw.flush() machen. Das kann ich aber verstehen, der die Ausgabe wird ja gepuffert. Aber warum muss ich denn bei einem BufferedWriter eine IOException abfangen, und beim PrintWriter nicht?
Ist das 2. Codebeispiel besser, oder gibt es einen noch anderen Weg, quasi eine Best Practice? Wie würdet Ihr die Geschichte lösen?
Danke für Eure Hilfe!