2010-10-20 30 views

cevap

8

DataInputStream kaynağına bakarsanız, temel akışları da kapattığını görebilirsiniz. Yani ihtiyacın yok. ve bu, her tür akış için geçerlidir (veya olmalıdır).

+3

Daha ayrıntılı olarak, belgelenmiştir. Bu biraz parçalanmış, ancak 'DataInputStream',' FilterInputStream''den 'close' öğesini, 'InputStream' in altında 'close' olarak adlandırdığı belgeleri saklıyor: http://download.oracle.com/javase/6/docs/api /java/io/FilterInputStream.html Yani, davranışın belirli bir uygulamanın sadece bir yan etkisi olmadığını biliyorsunuz. –

+0

Aslında "Closeable" –

+2

@Sherwin'in tüm türleri için doğru ... "sözleşmeyi" düzgün bir şekilde uyguladıkları şartıyla :-) –

1

Karazi, bunu önermekte haklıdır. Dahası, sadece bir fikir edinmek ve biraz daha fazla fikir edinmek için, Java IO API'si aslında dekoratör kalıbı kullanılarak uygulanmaktadır. Viki'de decorator pattern'u kontrol edebilirsiniz.

1

Bir istisna durumunda, düzgün bir şekilde temizlendiğinden emin olmak için kapatmayı son olarak bloke ediyorum.

public void tryToDoWhatever() throws Exception 
{ 
    DataInputStream in = null; 
    try 
    { 
     in = new DataInputStream(
       new BufferedInputStream(new FileInputStream(file))); 
    } 
    finally 
    { 
     if (in != null) 
      in.close(); 
    } 
} 
+0

Evet, haklısınız ama bu yeni bir soru ortaya çıkarır: IOException tarafından nasıl ele alınabilir? in.close ?? Sonunda try catch'u ekleyin veya üst seviyede iletin mi? –

+0

Evet, bu tamamen boş değil. Normalde yaptığım gibi – willcodejavaforfood

+0

@Manuel Selva - Her zaman iş mantığından istisna işlemlerini ayırdım. Orada istisnalar ile uğraşmak için bir try/catch bloğunda tryToDoWhatever çağırır 'doWhatever()' bir yöntem olurdu – willcodejavaforfood

3

Daha önce yapmış olduğum bir cevabı yanıtlamak için bu fırsatı kullanacağım.

Project Lombok numaralı telefonu kullanarak Lombok'un akışları sizin için doğru bir şekilde kapatmasına izin verebilirsiniz. Ayrıntılar here bulunabilir.

İlgili konular