0

これはスタイルとつまらない質問ですが、これに関する意見に興味があります。次のコードを検討してください (問題を回避するために別の関数を使用できることは無視してください)。

FileUtils.copyInputStreamToFile(new FileInputStream(f1), f2);

copyInputStreamToFileapache.commons.io からのもので、ストリームを閉じます。これは、通常のすべての状況で InputStream を閉じる必要があると考えています。なぜなら、作成時に例外が発生した場合、InputStream閉じるものは何もなく、内部で例外が発生した場合copyInputStreamToFile、この関数がストリームを閉じてくれるからです。

InputStreamしかし、 の作成からtry ブロックの開始までの間に例外やエラーが発生しないと想定するのは本当に安全copyInputStreamToFileでしょうか? OutOfMemoryErrorとか、とか、変なこと考えてThreadDeathます。したがって、上記のコードを次のように書き直すことができます。

InputStream is = null;
try {
    is = new FileInputStream(f1);
    FileUtils.copyInputStreamToFile(is, f2);
} finally {
    IOUtils.closeQuietly(is);
}

それは安全なはずですが、必要だと思いますか?

4

1 に答える 1

0

アプリケーションが並行しているかどうかに依存すると思います。そうである場合、 InputStreamの作成とcopyInputStreamToFileの本体の間で他のコードが実行されないと想定することはできません。

Marko Topolnikは、アプリケーションが並行でない場合のケースに答えます。

于 2012-07-06T11:08:45.893 に答える