import com.esotericsoftware.kryo.Kryo; import com.esotericsoftware.kryo.io.Input; import com.esotericsoftware.kryo.io.Output; import com.hazelcast.nio.ObjectDataInput; import com.hazelcast.nio.ObjectDataOutput; import com.hazelcast.nio.serialization.StreamSerializer; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; public class PersonKryoSerializer implements StreamSerializer<Person> { // Kryo instance is not threadsafe, but expensive, so that is why it is placed in a ThreadLocal. private static final ThreadLocal<Kryo> KRYO_THREAD_LOCAL = new ThreadLocal<Kryo>() { @Override protected Kryo initialValue() { Kryo kryo = new Kryo(); kryo.register(Person.class); return kryo; } }; public int getTypeId() { return 2; } public void write(ObjectDataOutput objectDataOutput, Person product) throws IOException { Kryo kryo = KRYO_THREAD_LOCAL.get(); Output output = new Output((OutputStream) objectDataOutput); kryo.writeObject(output, product); output.flush(); } public Person read(ObjectDataInput objectDataInput) throws IOException { InputStream in = (InputStream) objectDataInput; Input input = new Input(in); Kryo kryo = KRYO_THREAD_LOCAL.get(); return kryo.readObject(input, Person.class); } public void destroy() { } }