2012-09-14 13 views

risposta

5

Per PrintStream che scrive spesso per std out o err, questi stream potrebbero essere stati chiusi o scartati ma non si desidera che il programma si guasti in modo imprevisto come risultato.

PrintWriter è in molti modi la versione di PrintStream di Writer, anche se non sono sicuro che fosse una buona idea ripetere gli errori di PrintStream. ;)

Il fatto che PrintWriter non segnali IOException lo rende una scelta sbagliata per scrivere testo in un socket in cui spesso è necessario sapere che la connessione non è riuscita.

1

Penso che sia principalmente perché System.err è un PrintStream.

Quando si gestiscono eccezioni in un blocco catch, chiamare e.printStackTrace() è comune e scrive su System.err. Se tale chiamata ha generato un'eccezione, si perderebbe l'eccezione originale e si otterrebbe invece l'errore PrintStream generato dal codice. Avresti quindi bisogno di un ulteriore try/catch all'interno del catch catch per prevenire quel problema, il che rende un gran casino.

Si noti che JDK 1.7 risolve il problema di generare un'eccezione da un blocco catch e consente di accedere a entrambe le eccezioni.