67 lines
2.3 KiB
Java
67 lines
2.3 KiB
Java
|
package com.esotericsoftware.kryo.serializers;
|
||
|
|
||
|
import com.esotericsoftware.kryo.Kryo;
|
||
|
import com.esotericsoftware.kryo.KryoException;
|
||
|
import com.esotericsoftware.kryo.Serializer;
|
||
|
import com.esotericsoftware.kryo.io.Input;
|
||
|
import com.esotericsoftware.kryo.io.InputChunked;
|
||
|
import com.esotericsoftware.kryo.io.Output;
|
||
|
import com.esotericsoftware.kryo.io.OutputChunked;
|
||
|
import java.io.IOException;
|
||
|
import java.util.zip.Deflater;
|
||
|
import java.util.zip.DeflaterOutputStream;
|
||
|
import java.util.zip.Inflater;
|
||
|
import java.util.zip.InflaterInputStream;
|
||
|
public class DeflateSerializer extends Serializer {
|
||
|
private int compressionLevel = 4;
|
||
|
private boolean noHeaders = true;
|
||
|
private final Serializer serializer;
|
||
|
|
||
|
public DeflateSerializer(Serializer serializer) {
|
||
|
this.serializer = serializer;
|
||
|
}
|
||
|
|
||
|
@Override // com.esotericsoftware.kryo.Serializer
|
||
|
public Object copy(Kryo kryo, Object obj) {
|
||
|
return this.serializer.copy(kryo, obj);
|
||
|
}
|
||
|
|
||
|
@Override // com.esotericsoftware.kryo.Serializer
|
||
|
public Object read(Kryo kryo, Input input, Class cls) {
|
||
|
Inflater inflater = new Inflater(this.noHeaders);
|
||
|
try {
|
||
|
return this.serializer.read(kryo, new Input(new InflaterInputStream(new InputChunked(input, 256), inflater), 256), cls);
|
||
|
} finally {
|
||
|
inflater.end();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public void setCompressionLevel(int i) {
|
||
|
this.compressionLevel = i;
|
||
|
}
|
||
|
|
||
|
public void setNoHeaders(boolean z2) {
|
||
|
this.noHeaders = z2;
|
||
|
}
|
||
|
|
||
|
@Override // com.esotericsoftware.kryo.Serializer
|
||
|
public void write(Kryo kryo, Output output, Object obj) {
|
||
|
OutputChunked outputChunked = new OutputChunked(output, 256);
|
||
|
Deflater deflater = new Deflater(this.compressionLevel, this.noHeaders);
|
||
|
try {
|
||
|
DeflaterOutputStream deflaterOutputStream = new DeflaterOutputStream(outputChunked, deflater);
|
||
|
Output output2 = new Output(deflaterOutputStream, 256);
|
||
|
this.serializer.write(kryo, output2, obj);
|
||
|
output2.flush();
|
||
|
deflaterOutputStream.finish();
|
||
|
deflater.end();
|
||
|
outputChunked.endChunks();
|
||
|
} catch (IOException e) {
|
||
|
throw new KryoException(e);
|
||
|
} catch (Throwable th) {
|
||
|
deflater.end();
|
||
|
throw th;
|
||
|
}
|
||
|
}
|
||
|
}
|