2016-10-07 4 views
0

Iは、例えば、のJava:閉会ストリーム:(でも、終了後に非NULLのStreamsの)私のfinally節で

  finally // Clean up 
      { 
       if (os != null) { 
        try { 
         os.close(); 
        } 
        catch (IOException ioe) { 
         logger.warn("Failed to close outputStream", ioe); 
        } 
       } 
       if (is != null) { 
        try { 
         is.close(); 
        } 
        catch (IOException ioe) { 
         logger.warn("Failed to close inputStream", ioe); 
        } 
       } 

、任意のストリームをクリーンアップしかし、私はストリームも閉じた後に非NULL残ることがわかります。だからNULLをチェックするのは間違っていますか?または、closeの結果が表示されませんか?

+0

Java 7を使用していますか?もしそうなら、try-with-resourcesを見て、あなたがストリームを閉じるのを心配する必要はありません(バッファリングされたインプリメンテーションを実装している限り、BufferedInputStreamのようなものは何ですか) – Ash

答えて

5

ストリーム "オブジェクト"は、ストリームのインスタンスへの参照です。ストリームが開いているかどうかは、その状態の一部です。 close関数は、オブジェクトの状態で実行される関数なので、関数への参照には影響しません。

リファレンスはnullに設定されるまで非NULLのままですが、ストリームの状態は閉じられ、使用できなくなります。

+1

それが閉じているかどうかを確認するためには?それは基準として使用する必要がありますか? –

+2

@geneb。これらの投稿によると:http://stackoverflow.com/questions/8655901/how-to-check-whether-an-outputstream-is- http://stackoverflow.com/questions/981196/how-to-know-if-a-bufferedreader-stream-is-closedあなたは見ることができません...しかし、close関数は例外を投げることはありませんあなたは、 "os = null; is = null"を参照して、参照をnullにすることができますが、関数が終了後に終了した場合は、必要ではありません。 –

関連する問題