1

我正在用Java7編寫代碼,並使用try-with-resources功能。 當我創建一個ZipOutputStream的實例。通過這樣做,我不再需要關閉finally塊中的流。試用資源管理(當然是由JVM)。
我的問題是 - 關於使用closeEntry()。我應該在我的try塊中寫入這個方法,還是應該刪除它,JVM將通過try-with-resources特性自動關閉它,就像close()方法一樣?類ZipOutputStream的closeEntry()類

我幾乎可以肯定它與try-with-resources(或finally塊)不相關,我應該在我的try塊內而不是在finally塊中做(如果我使用常規嘗試-catch-finally),但我想確定它。

謝謝!

回答

1

closeEntry()的使用情況如何?我應該在我的try塊中寫入這個方法,還是應該刪除它,JVM將通過try-with-resources特性自動關閉它,就像close()方法一樣?

如果你想調用closeEntry(),那麼你應該安排它被調用。當try-with-resources塊退出時它不會被自動調用 - 至少不是直接的。也不應該是這樣,因爲closeEntry()邏輯上與putNextEntry()配對,並且輸入try塊的主體不會導致putNextEntry()被調用。

如果實際上一個條目在被調用時打開,流封鎖可能包含closeEntry()的效果。但是,這並沒有記錄,所以最安全的做法是確保closeEntry()在最後一項之後被調用。您也可以在條目之間調用它,但不需要這樣做,因爲putNextEntry()被記錄爲在開始新條目之前關閉任何未清條目。