2010-06-12 2 views
0

У меня есть ниже код для чтения из URL объекта:Закрытие inputstreams

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

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

reader.close(); 

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

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

ответ

1

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

Источник в 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; 
     } 
    } 
} 
Смежные вопросы