package org.vertexium.serializer.kryo.quickSerializers; import com.esotericsoftware.kryo.Kryo; import com.esotericsoftware.kryo.io.Input; import com.esotericsoftware.kryo.io.Output; import com.esotericsoftware.kryo.io.UnsafeInput; import com.esotericsoftware.kryo.io.UnsafeOutput; import org.vertexium.serializer.kryo.KryoFactory; public class KryoQuickTypeSerializer implements QuickTypeSerializer { private final ThreadLocal<Kryo> kryo = new ThreadLocal<Kryo>() { @Override protected Kryo initialValue() { return new KryoFactory().createKryo(); } }; @Override public byte[] objectToBytes(Object value) { Output output = new UnsafeOutput(2000, -1); output.writeByte(MARKER_KRYO); kryo.get().writeClassAndObject(output, value); return output.toBytes(); } @Override public <T> T valueToObject(byte[] data) { Input input = new UnsafeInput(data); input.read(); return (T) kryo.get().readClassAndObject(input); } }