BufferedWriter ableiten und benutzen

Deschi

Grünschnabel
Hi Leute,

ich möchte meine eigene BufferedWriter Klasse schreiben, bei der newLine() und flush() gleich in der write(String) Funktion mit eingebaut sind und diese in einer kleinen Client Server Anwendung nutzen.

Meine Eigene Klasse:
Code:
import java.io.*;
public class MyBufferedWriter extends BufferedWriter
{
	public MyBufferedWriter(Writer s)
	{
		super(s);
	}
	public void write(String s) throws IOException
	{
		super.write(s); 
		super.newLine();
		super.flush();
	}
}

Und hier der Client:
Code:
import java.io.*;
import java.net.*;

public class InOutClient {
	public static void main(String[] args) {
//	 socket auf localhost port 1234 konstruieren 
	try {
		Socket s = new Socket("localhost",1234);  
		System.out.println("Bitte eine Nachricht an den Server schicken.");
		System.out.println("Dieser antwortet dann mit dem selben Text in Großbuchstaben.");
		System.out.println("Zur Programmbeendigung einfach goodbye schicken");
		BufferedReader key_b; //BufferedReader für die Tastatur-Eingabe
		String text; //Tastatur Eingabe speichern
		MyBufferedWriter my_out;
		BufferedReader in;
		while(true){
		key_b = new BufferedReader( new InputStreamReader( System.in ) );
		text = key_b.readLine();
		my_out = new MyBufferedWriter(new OutputStreamWriter(s.getOutputStream())); 
		out.write(text); 
		//my_out.newLine();
		//my_out.flush();
		in = new BufferedReader(new InputStreamReader(s.getInputStream())); 
		System.out.print("Vom Server: "); 
		System.out.println(in.readLine()); 
		
}
	} catch (UnknownHostException e) {
		// TODO Auto-generated catch block
		System.out.println("verbindung beendet");
	} catch (IOException e) {
		System.out.println("verbindung beendet");
	}
        }
}

Wenn ich das ganze bei gestartetem Server aufrufe, gibts es einen: java.lang.StackOverflowError

Wenn ich die Client-Server Anwendung mit BufferedWriter nutze funktioniert alles, aber ich möchte ja meine eigene Klasse nutzen.

Ich hoffe ihr könnt mir helfen.

Gruß
Deschi
 
Code:
my_out = new MyBufferedWriter(new OutputStreamWriter(s.getOutputStream())); 
		out.write(text); <----hier ist ein fehler muss my_out.write(text); heissen
vielleicht klappt es so..
mfg
 
Danke!
Aber, leider läuft es immer noch nicht. Sobald ich client und Server starte, ein Zeichen über Tastatur eingebe und mit Return abschicke, bekomme ich im Client die Meldung: java.lang.StackOverflowError

Gruß
Deschi
 
Kein wunder wenn du dir anguckst steht in deiner Überschriebenen write() Methode wieder ein Aufruf von write() mit drin, das heißt die Methode ruftz sich rekursiv immer wieder selbst auf, und überflutet damit den Stack >> Stackoverflow!

Eine Möglichkeit wäre das write im inneren der Methode selber zu schreiben, oder du nennst deine Methode einfach newwrite(), was sicher die einfachste Möglichkeit wäre, natürlich musst du sie dann auch dementsprechend aufrufen.
 

Neue Beiträge

Zurück