< prev index next >
src/java.base/share/classes/java/util/zip/Deflater.java
Print this page
*** 185,195 ****
*/
public Deflater(int level, boolean nowrap) {
this.level = level;
this.strategy = DEFAULT_STRATEGY;
this.zsRef = DeflaterZStreamRef.get(this,
! init(level, DEFAULT_STRATEGY, nowrap));
}
/**
* Creates a new compressor using the specified compression level.
* Compressed data will be generated in ZLIB format.
--- 185,195 ----
*/
public Deflater(int level, boolean nowrap) {
this.level = level;
this.strategy = DEFAULT_STRATEGY;
this.zsRef = DeflaterZStreamRef.get(this,
! level, DEFAULT_STRATEGY, nowrap);
}
/**
* Creates a new compressor using the specified compression level.
* Compressed data will be generated in ZLIB format.
*** 602,614 ****
static class DeflaterZStreamRef implements Runnable {
private long address;
private final Cleanable cleanable;
! private DeflaterZStreamRef(Deflater owner, long addr) {
this.cleanable = (owner != null) ? CleanerFactory.cleaner().register(owner, this) : null;
! this.address = addr;
}
long address() {
return address;
}
--- 602,614 ----
static class DeflaterZStreamRef implements Runnable {
private long address;
private final Cleanable cleanable;
! private DeflaterZStreamRef(Deflater owner, int level, int strategy, boolean nowrap) {
this.cleanable = (owner != null) ? CleanerFactory.cleaner().register(owner, this) : null;
! this.address = init(level, strategy, nowrap);
}
long address() {
return address;
}
*** 630,656 ****
* overridden, uses {@code finalizer} mechanism for resource cleanup. So
* {@code end} method can be called when the {@code Deflater} is unreachable.
* This mechanism will be removed when the {@code finalize} method is
* removed from {@code Deflater}.
*/
! static DeflaterZStreamRef get(Deflater owner, long addr) {
Class<?> clz = owner.getClass();
while (clz != Deflater.class) {
try {
clz.getDeclaredMethod("end");
! return new FinalizableZStreamRef(owner, addr);
} catch (NoSuchMethodException nsme) {}
clz = clz.getSuperclass();
}
! return new DeflaterZStreamRef(owner, addr);
}
private static class FinalizableZStreamRef extends DeflaterZStreamRef {
final Deflater owner;
! FinalizableZStreamRef (Deflater owner, long addr) {
! super(null, addr);
this.owner = owner;
}
@Override
void clean() {
--- 630,656 ----
* overridden, uses {@code finalizer} mechanism for resource cleanup. So
* {@code end} method can be called when the {@code Deflater} is unreachable.
* This mechanism will be removed when the {@code finalize} method is
* removed from {@code Deflater}.
*/
! static DeflaterZStreamRef get(Deflater owner, int level, int strategy, boolean nowrap) {
Class<?> clz = owner.getClass();
while (clz != Deflater.class) {
try {
clz.getDeclaredMethod("end");
! return new FinalizableZStreamRef(owner, level, strategy, nowrap);
} catch (NoSuchMethodException nsme) {}
clz = clz.getSuperclass();
}
! return new DeflaterZStreamRef(owner, level, strategy, nowrap);
}
private static class FinalizableZStreamRef extends DeflaterZStreamRef {
final Deflater owner;
! FinalizableZStreamRef (Deflater owner, int level, int strategy, boolean nowrap) {
! super(null, level, strategy, nowrap);
this.owner = owner;
}
@Override
void clean() {
< prev index next >