1

私はJava7でコードを書いています。私はtry-with-resources機能を使用しています。 ZipOutputStreamのインスタンスを作成するとき。これを行うことで、私はfinallyブロックのストリームを閉じる必要がなくなりました。 try-with-resourcesはそれを管理しました(もちろんJVMによって)。
私の質問は - closeEntry()の使用についてはです。このメソッドをtryブロックに書き込むか、削除する必要があります.JVMはclose()メソッドと同じようにtry-with-resources機能によって自動的に閉じますか?クラスZipOutputStreamのcloseEntry()

私はそれがtry-with-resources(またはfinallyブロック)と関連がないことをほとんど確信しています。私はtryブロック内で行い、finallyブロックでは行いません(通常のtry -catch-finally)が、私はそれについて確信しています。

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

答えて

1

closeEntry()の使用についてはどうですか?このメソッドをtryブロックに書き込むか、削除する必要があります.JVMはclose()メソッドと同じようにtry-with-resources機能によって自動的に閉じますか?

closeEntry()が呼び出されるようにするには、それを呼び出すようにしてください。 try-with-resourcesブロックが終了したときに自動的に呼び出されることはありません。 closeEntry()putNextEntry()と論理的にペアであり、tryブロックの本文を入力してもputNextEntry()が呼び出されません。

実際にエントリが呼び出されたときにエントリが開いている場合、ストリームクロージャはcloseEntry()の効果を含む可能性があります。しかし、これは文書化されていないので、最も安全なことは実際にはcloseEntry()が最後のエントリの後に呼び出されることを保証することです。また、エントリ間で呼び出すこともできますが、新しいエントリを開始する前に、開いているエントリを閉じるためにputNextEntry()が文書化されているため、エントリを呼び出す必要はありません。

関連する問題