2016-10-13 6 views
1

私は、関数が終了した後に、関数の中で開いているファイル/ファイルポインタ(バッファ付きリーダー)がどうなるのだろうかと思いましたか?例関数が終了した後に、関数内で開いたファイル/ファイルポインタ(バッファドリーダー)はどうなりますか?

public void foo(){ 
    String curr; 
    for (int i = 0; i < 100; i++){ 
     BufferedReader br = new BufferedReader(new FileReader(file_location)); 
     while((curr = br.readLine()) != null){ 
      /* do something */ 
     } 
    } 
}  

私たちは、私は、バッファリーダーを閉じないことに注意しなければならないために

ありがとうございました。

答えて

1

基本的にBufferedReaderオブジェクト自体はが失われています。が失われていますが、それ以上アクセスする方法はありません。

もちろん、JVMは開いているファイルに対してまだファイルハンドルを保持している可能性があります。その意味で、あなたは単にある種のリソースリークを作成します。理論的には、あなたがそれを非常に頻繁に行うと、本当の問題に遭遇するかもしれません。

詳細は、JVM自体によります。それが実行されているOSが表示されます。

+0

ありがとうございました。それは意味をなさない。しかし、GCはいつかこれらのファイルハンドルを削除しますか?また、このメソッドがオブジェクトの一部であったとしたらどうなりますか?オブジェクトがGCでクリーンアップされるとすぐにハンドルが削除されますか? –

+0

私は "複製された"答えが何を言っているかをコピー&ペーストすることができました。しかし、私はあなたがその他の質問をクリックし、そのトップボトムを読むだけであれば、私たちの方にとってより簡単だと思います。それでもなお質問がある場合は、私に再度連絡してください。それにもかかわらず、私の答えが十分に役立っていれば、また受け入れることを検討してください;-) – GhostCat

関連する問題