2013-05-16 28 views

cevap

12

kapatmak için gerekli değildir.

public void close() throws IOException { 
    synchronized (lock) { 
     if (out == null) { 
      return; 
     } 
     try { 
      flushBuffer(); 
     } finally { 
      out.close(); 
      out = null; 
      cb = null; 
     } 
    } 
} 
+5

[The 'out.close();' satır eksik] (http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/8u40-b25 /java/io/BufferedWriter.java?av=f#259) Java 8 'BufferedWriter ' – Mihai

+5

@ A.Roshenko'ya yakından bakın,' try' bloğu, java 8 BufferedReader'da' try-with 'bloğu ile değiştirilmiştir. Yani, aynı şey, altta yatan yazar hala java 8 de kapalı oluyor. –

2

Evet writer.close() yanı akışları/yatan yazarlar kapatır. BufferedWriter o sarar yazar kapanış ilgilenir çünkü

2

Tüm ayrı akışı olduğu gibi tek tek her açık akışını kapatmak için daha iyidir: ikna etmek

, bu BufferedWriter yakın yönteminin kaynak kodudur. İç içe akışta bir miktar hata oluşursa, akış kapanmaz. Yani her yuvalanmış akışı yalnızca kapatmak için daha iyi. Yalnızca dıştaki akışları kapatmak gerekir

Correct way to close nested streams and writers in Java

+0

Bu soruya bağlantı gönderdiğiniz için teşekkür ederiz. Ama çünkü, hem de iç yazarları kapatmak için daha iyi olduğunu katılmıyorum: sen benim cevap görüldüğü gibi 1) Finally bloğu() (nadir) durumda) iç yazarın yakın yöntem 2 denir garanti eder out.close() bir istisna atar, yazarın üye değişkenleri dışarı çıkar ve cb null olarak ayarlanmamıştır, çünkü bunlar basit nesnelerdir (örneğin, bir dosya tanıtıcısı gibi sistem kaynakları değil) – sambe

1

: Daha fazla ayrıntı için

bağlantıyı takip bölümüne başvurun. Akarsuların geri kalanı geçicidir ve otomatik olarak kapatılacaktır. Eğer akışları ayrı ayrı oluşturursanız ve sonra onları yerleştirirseniz, bu durumda bireysel akışı kapatmanız gerekir. Bu soruya ayrıca, Correct way to close nested streams and writers in Java

+0

Hayır, yok 'bireysel akışı [s] kapatmak gerekiyor. En dış akışı kapatmanız yeterlidir. – EJP