-1

Java6を想定すると、このコードはファイル記述子のリークから安全です:

{
    InputStream in = fileObject.getReadStream();
    // fileObject cleans it's internal state in case it throws exception
    try {
        // do whatever, possibly throwing exception
    } finally {
        try {
            in.close();
        } catch (Exception ex) {
            // failure to close input stream is no problem
        }
    }
}

編集:質問をあまり明白にしないようにするために、別の言い方をすれば、上記のコードはこの長いコードと同じです:

{
    InputStream in = null;
    try {
        in = fileObject.getReadStream();
        // fileObject cleans it's internal state in case it throws exception

        // do whatever, possibly throwing exception
    } finally {
        if (in != null) {
            try {
                in.close();
            } catch (Exception ex) {
                // failure to close input stream is no problem
            }
        }
    }
}

つまり、開いたストリームを返すか例外をスローするメソッドの呼び出しが の直前にあるか、ブロックtryの内側にあるかは重要ですか?try

4

2 に答える 2

2

はい、結構です。答えに値することすらありません。バリアント(私はあまり使用しません)は次のとおりです。

InputStream in = null;
try {
    in = fileObject.getReadStream();
    // do whatever, possibly throwing exception
} finally {
    if (in  != null) {
        try {
           in.close();
        } catch (Exception ex) {
            // failure to close input stream is no problem if everything else was ok
        }
    }
}
于 2013-03-12T10:08:03.933 に答える
-1

私は Java にあまり詳しくない学生ですが、少しでもお役に立てれば幸いです。このコードでは、ファイル記述子のリークの問題を回避できないと思います。try clouse で in.close メソッドを取り囲んでも、in.close メソッドがいくつかの例外をスローする場合、それは役に立ちません。

于 2013-03-12T10:12:36.973 に答える