Закрытие входных потоков - PullRequest
0 голосов
/ 12 июня 2010

У меня есть следующий код для чтения из объекта URL:

URL url= new URL("http://datasource.com");     
BufferedReader reader = new BufferedReader(
                                new InputStreamReader(url.openStream()));

После того, как я закончу получать данные, этого достаточно, чтобы закрыть и освободить все ресурсы:

reader.close();

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

InputStreamReader inputStreamReader = new InputStreamReader(url.openStream());
BufferedReader reader = new BufferedReader(inputStreamReader);
// Do Stuff
inputStreamReader.close();
reader.close();

1 Ответ

1 голос
/ 13 июня 2010

Закрыть читателя достаточно, Поскольку классы Reader / InputStream реализуются шаблоном декоратора, действие close будет распространяться на decoratee.

Источник в BufferedReader, ридер (переменная в) тоже закрыт:

public void close() throws IOException {
    synchronized (lock) {
        if (!isClosed()) {
            in.close();
            buf = null;
        }
    }
}

Источник в InputStreamReader, входной поток тоже закрыт:

@Override
public void close() throws IOException {
    synchronized (lock) {
        // BEGIN android-added
        if (decoder != null) {
            decoder.reset();
        }
        // END android-added
        decoder = null;
        if (in != null) {
            in.close();
            in = null;
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...