Насколько близки входные потоки Java? - PullRequest
7 голосов
/ 20 октября 2010

В следующем коде:

DataInputStream in = new DataInputStream(
          new BufferedInputStream(new FileInputStream(file)));
in.close();

Нужно ли закрывать 2 других потока в дополнение к закрытию потока "верхнего уровня"?

Ответы [ 4 ]

8 голосов
/ 20 октября 2010

если вы посмотрите на источник DataInputStream, вы увидите, что он также закрывает основные потоки.так что тебе не нужно.и это (или должно быть) верно для всех типов потоков.

3 голосов
/ 20 октября 2010

Я воспользуюсь этой возможностью, чтобы ответить с ответом, который я уже сделал ранее.

Используя Project Lombok , вы можете позволить Lombok правильно закрыть потоки для вас.Подробности можно найти здесь .

1 голос
/ 20 октября 2010

Я бы вставил закрытие в блок finally, просто чтобы убедиться, что он очищен правильно в случае исключения.

public void tryToDoWhatever() throws Exception
{
    DataInputStream in = null;
    try
    {
         in = new DataInputStream(
              new BufferedInputStream(new FileInputStream(file)));
    }
    finally
    { 
        if (in != null)
            in.close();
    }
}
1 голос
/ 20 октября 2010

Карази, прав, предлагая это. Кроме того, просто чтобы получить представление и немного больше понять, API Java IO фактически реализован с использованием шаблона декоратора. Вы можете проверить шаблон декоратора на вики.

...