2012-09-14 14 views

Odpowiedz

5

Dla PrintStream, który często zapisuje na standardowe wyjście lub błąd, strumień ten mógł zostać zamknięty lub odrzucony, ale nie chcemy, aby program niespodziewanie zawiedzie w wyniku.

PrintWriter jest pod wieloma względami wersją PrintStream autorstwa Writera, chociaż nie jestem pewien, czy dobrym pomysłem było powtórzenie błędów PrintStream. ;)

Fakt, że PrintWriter nie zgłasza wyjątku IOException czyni go złym wyborem do pisania tekstu do gniazda, w którym często trzeba wiedzieć, że połączenie nie powiodło się.

1

Myślę, że to przede wszystkim dlatego, że System.err to PrintStream.

Podczas obsługi wyjątków w bloku catch, wywołanie funkcji e.printStackTrace() jest częste i zapisywane do System.err. Jeśli to wywołanie zwróci wyjątek, stracisz oryginalny wyjątek i otrzymasz zamiast tego błąd PrintStream wygenerowany z twojego kodu. Będziesz wtedy potrzebował dodatkowej próby/catch w swoim bloku catch, aby zapobiec temu problemowi, co powoduje wielki bałagan.

Należy pamiętać, że JDK 1.7 rozwiązuje problem zrzucenia wyjątku z bloku catch i umożliwia dostęp do obu wyjątków.

Powiązane problemy