Czytanie ze strumienia

0

Witam.
Mam pewien problem. Staram się teraz napisać prosty czat.

 public class ServiceThread extends Thread {
	private Socket socket;
	public ServiceThread(Socket s){
		socket = s;
	}
	public void run() {
		System.out.println("Działam");
		BufferedReader in = null;


		String text = null;
		while(true){
			try {
				System.out.println("Działam2");
				in = new BufferedReader(new InputStreamReader( socket.getInputStream()) );
				System.out.println("Działam3");
				text = in.readLine();

				System.out.println("Działam4");
			} catch (IOException e) {
				System.err.println( e.getMessage() );
				e.printStackTrace();
			}
			System.out.println(text);
		}
	}
}

Wiem że nie zamykam strumienia i otwieram go cały czas, ale to powstało w wyniku testów i to się zmieni. W każdym razie gdy stworzę obiekt z otwartym socketem wyświetla mi się wszystko do Działam3. Strumień jest pusty więc wątek czeka aż się zapełni żeby mógł odczytać string - logiczne. Ale gdy wyślę już coś przez socket to zamiast przeczytać raz i wyrzucić ten tekst to pojawia on się w kółko + exceptiony różnorakie. Dlaczego tak się dzieje? Zawsze używałem strumieni tylko na plikach a tam nie było opcji żeby coś dopisać do strumienia w trakcie otworzenia więc wszystko chodziło do zwrócenia nulla. Jak to powinienem zrobić? Da się jakoś oczyścić strumień?

Na koniec mam małe pytanko. Jest ono na tyle proste że pewnie każdy będzie znał odpowiedź i nie ma sensu tworzyć osobnego tematu. Mianowicie, czy pisząc coś takiego:

 			FileInputStream f = new FileInputStream("File.file");
			BufferedInputStream b = new BufferedInputStream(f);
			DataInputStream s = new DataInputStream(b);

Muszę zamykać wszystkie strumienie to jest - f,b,s czy wystarczy że zamknę s? Bo w przykładach jest to bardzo bagatelizowane i olewane.

0
  1. JAKIE wyjątki? Różnorakie *** nam mówi...
  2. A jak zrobisz to jak człowiek i linijkę
in = new BufferedReader(new InputStreamReader( socket.getInputStream()) );

wyciągniesz przed while?

0

Przepraszam za pomyłkę. Teraz nie sypie wyjątkami. Sypało jak dałem DataInputStream i readUTF. Wtedy były czasem błędne typy odczytanych danych. W tej formie nie rzuca wyjątków. Za pierwszym razem zwraca tekst a potem null.

Próbowałem zrobić jak człowiek z wyciągnięciem przed while ale tez nie działa.

1 użytkowników online, w tym zalogowanych: 0, gości: 1