Этот вопрос состоит из двух частей:
Вам нужно закрыть потоки?
В чем разница между InputStream i1 = new InputStream()
и new InputStream()
?
и
Стоит ли создавать все локальные переменные только для их закрытия?
Я знаю простые ответы с первой, вы можете сохранить переменную, продолжать использовать переменную и даже закрыть входной поток, как хороший программист. Во-вторых, вы потеряли свою рекомендацию, но она выглядит более кратким. Есть ли разница в памяти между этими двумя? Как насчет разности скоростей (в разрушении)?
Теперь к примерам, которые подтолкнули мои мысли. Сначала мы используем `` новый Object() `, не отбрасывая его.
public void getLongStrings() throws IOException {
try {
foo = FileCopyUtils.copyToString(new InputStreamReader(aBook.getInputStream()));
bar = FileCopyUtils.copyToString(new InputStreamReader(aNovel.getInputStream()));
}
catch (IOException ioe) {
//do something appropriate here;
}
}
Теперь для более подробного метода
public void getLongStrings() throws IOException {
InputStream i1 = null;
InputStream i2 = null;
InputStreamReader isr1 = null;
InputStreamReader isr2 = null;
try {
i1 = aBook.getInputStream();
i2 = aNovel.getInputStream();
isr1 = new InputStreamReader(i1);
isr2 = new InputStreamReader(i2);
foo = FileCopyUtils.copyToString(isr1);
bar = FileCopyUtils.copyToString(isr2);
}
catch (IOException ioe) {
//do something appropriate here
} finally {
if (i1 != null) i1.close();
if (i2 != null) i2.close();
if (isr1 != null) isr1.close();
if (isr2 != null) isr2.close();
}
}
ли первый или второй лучше? Бывает ли одно быстрее другого? Умеет ли закрывать все мои потоки, хотя это не выглядит красиво?
Благодарим за любые идеи (или изменения).
Собственно, первый фрагмент верен. См. Мой ответ. –
@JBNizet: Правильно * если * используется код, который автоматически закрывается. Но вы делаете предположение, и OP должен знать, что потоки * должны быть закрыты *, кто бы ни закрыл его. Будет редактировать, хотя. –
Разве это не то, что я сказал в своем ответе? –