2011-12-14 5 views
5

Nel codice seguente la funzione di chiusura per outPutStream genera un'eccezione IOException che dovrei rilevare. La mia domanda è ho bisogno di gestirlo? Dato che sto lavorando con i dispositivi mobili e voglio assicurarmi di liberare tutte le risorse che uso, o posso tranquillamente ignorare l'eccezione.Devo gestire o ignorare la IOException attivata dalla funzione closeStream close()?

//... 
OutputStream output = null; 
try { 
    output = connection.getOutputStream(); 
    output.write(query.getBytes(charset)); 
} finally { 
    if (output != null) try { 
     output.close(); 
    } catch (IOException e) { 
     // Do i need to do something here ? 
    } 
} 
+0

Non dovresti mai ignorare le eccezioni che potrebbero essere generate, dare un'occhiata al blocco delle risorse Try-With nuovo in Java 7, questo codice potrebbe sembrare un po 'più carino: http://docs.oracle.com/javase/ tutorial/essential/exceptions/tryResourceClose.html –

+0

Cosa puoi fare con questo? – DaveRlz

+0

Sì, quello mi ha sempre fatto grattarmi la testa. Quello che faccio sempre è solo loggare l'errore, in modo che se dovesse accadere lo so, lo so, ma non ho idea di cosa si dovrebbe fare per recuperare in questa situazione (se mai). –

risposta

7

Se la chiusura non funziona, cosa si può fare?

L'unica cosa che puoi fare è registrare l'eccezione e, come suggerito da @mprabhat, puoi impostare il riferimento su null per accelerare il GC.

+0

Ha senso chiamare flush()? o non può essere eseguita. – Jimmy

+0

Penso che butterei anche IOException – stivlo

+0

Penso che sia utile, dopo un po 'di lettura, la chiamata arriverà per prima. – Jimmy

0

Nel peggiore dei casi, è possibile dare un avvertimento. Ma generalmente, tali eccezioni vengono lanciate quando si tenta di chiudere una sessione già chiusa. In questo caso, non devi fare nulla.

3

La documentazione java non fornisce dettagli su cui tutte le condizioni diverse di chiusura generano uno IOException, quindi non c'è molto che si possa fare.

Almeno è possibile impostare il riferimento di OutputStream su null e registrare l'eccezione.

+0

buona idea, ha senso impostare il riferimento su null +1 – stivlo

0

In Java efficace Joshua Bloch lo menziona come una delle eccezioni che potresti voler ignorare. In generale però, dice, si vuole fare di più con le eccezioni che semplicemente registrandole.