< prev index next >
src/java.base/share/classes/java/util/zip/Inflater.java
Print this page
*** 64,73 ****
--- 64,87 ----
* } catch (java.util.zip.DataFormatException ex) {
* // handle
* }
* </pre></blockquote>
*
+ * <p>
+ * @apiNote
+ * In earlier versions the {@link Object#finalize} method was overridden and
+ * specified to call the {@code end} method to close the {@code inflater} and
+ * release the resource when the instance becomes unreachable.
+ * The {@code finalize} method is no longer defined. The recommended cleanup
+ * for decompressor is to explicitly call {@code end} method when it is no
+ * longer in use.
+ *
+ * @implNote
+ * The resource of the decompressor will be released when the instance becomes
+ * phantom-reachable, if the {@code end} is not invoked explicitly.
+ * <p>
+ *
* @see Deflater
* @author David Connelly
* @since 1.1
*
*/
*** 99,109 ****
* library in order to support certain optimizations.
*
* @param nowrap if true then support GZIP compatible compression
*/
public Inflater(boolean nowrap) {
! zsRef = new ZStreamRef(init(nowrap));
}
/**
* Creates a new decompressor.
*/
--- 113,123 ----
* library in order to support certain optimizations.
*
* @param nowrap if true then support GZIP compatible compression
*/
public Inflater(boolean nowrap) {
! this.zsRef = new ZStreamRef(this, () -> init(nowrap), Inflater::end);
}
/**
* Creates a new decompressor.
*/
*** 359,400 ****
}
}
/**
* Closes the decompressor and discards any unprocessed input.
* This method should be called when the decompressor is no longer
! * being used, but will also be called automatically by the finalize()
! * method. Once this method is called, the behavior of the Inflater
! * object is undefined.
*/
public void end() {
synchronized (zsRef) {
! long addr = zsRef.address();
! zsRef.clear();
! if (addr != 0) {
! end(addr);
buf = null;
}
}
- }
-
- /**
- * Closes the decompressor when garbage is collected.
- *
- * @deprecated The {@code finalize} method has been deprecated.
- * Subclasses that override {@code finalize} in order to perform cleanup
- * should be modified to use alternative cleanup mechanisms and
- * to remove the overriding {@code finalize} method.
- * When overriding the {@code finalize} method, its implementation must explicitly
- * ensure that {@code super.finalize()} is invoked as described in {@link Object#finalize}.
- * See the specification for {@link Object#finalize()} for further
- * information about migration options.
- */
- @Deprecated(since="9")
- protected void finalize() {
- end();
- }
private void ensureOpen () {
assert Thread.holdsLock(zsRef);
if (zsRef.address() == 0)
throw new NullPointerException("Inflater has been closed");
--- 373,393 ----
}
}
/**
* Closes the decompressor and discards any unprocessed input.
+ *
* This method should be called when the decompressor is no longer
! * being used. Once this method is called, the behavior of the
! * Inflater object is undefined.
*/
public void end() {
synchronized (zsRef) {
! zsRef.clean();
buf = null;
}
}
private void ensureOpen () {
assert Thread.holdsLock(zsRef);
if (zsRef.address() == 0)
throw new NullPointerException("Inflater has been closed");
< prev index next >