No, è cattiva pratica. IMO, dovresti prendere in considerazione la possibilità di creare la variabile final
.
La gestione delle risorse deve essere gestita nel modo standard acquire(); try { use(); } finally { release(); }
. In questo caso:
In realtà questo codice preleva qualsiasi codifica di carattere impostata come predefinita. Suggerisco di essere esplicito con un particolare set di caratteri hard-coded o Parameterise from Above.
final InputStream rawIn = new FileInputStream("myfile.txt");
try {
BufferedReader in = new BufferedReader(
new InputStreamReader(rawIn, "UTF-8")
);
// code
} finally {
rawIn.close();
}
Non si deve creare l'involucro torrenti/lettori al di fuori del blocco try (e prima che l'assegnazione delle risorse) perché potrebbero gettare. Allo stesso modo la loro chiusura potrebbe gettare (questo era in realtà un bug in BufferedOutputStream
che potrebbe gettare su flush
). Alcuni flussi di input possono avere altre risorse, quindi sono necessari due try { ... finally { x.close(); }
s.
Per l'output, in genere è necessario flush
nel normale corso degli eventi. Ma generalmente non in casi eccezionali. Infatti lodi solito fa un flush
, quindi non dovresti chiuderli nel caso eccezionale. Se i decoratori sono entrambi flush
e hanno risorse, allora dovrai sogghignare e scoprirlo.
Ci sono occasioni molto infrequenti quando azzerare è una buona idea. Ad esempio, se una variabile è l'unico riferimento a un oggetto di grandi dimensioni e si intende creare un nuovo oggetto di grandi dimensioni da assegnare ad esso, è preferibile cancellare il riferimento per consentire il recupero del vecchio prima di allocare il nuovo.
fonte
2010-03-22 19:51:48
@Hei: Benvenuti in SO. Solo per il futuro (e se modifichi questa domanda), puoi indentare righe di codice con quattro spazi e verranno visualizzati in blocchi di codice speciali, che li rende più facili da leggere. – Pops
Grazie per il commento, esaminerò quello per le domande future. – Hei