package com.github.wangxuehui.rpc.serializer.kryo; import com.github.wangxuehui.rpc.serializer.Deserializer; import com.github.wangxuehui.rpc.serializer.Serializer; import com.github.wangxuehui.rpc.serializer.model.ImmutableModel; import org.objenesis.strategy.StdInstantiatorStrategy; import com.esotericsoftware.kryo.Kryo; import com.esotericsoftware.kryo.io.Input; import com.esotericsoftware.kryo.io.Output; public class KryoSerializer implements Serializer, Deserializer { private static final Kryo kryo = new Kryo(); static { kryo.register( ImmutableModel.class ); kryo.setInstantiatorStrategy( new StdInstantiatorStrategy() ); } @Override public <T> T deserialize( final byte[] bytes , final Class<T> clazz ) { final Object value = kryo.readClassAndObject( new Input( bytes ) ); return clazz.cast( value ); } @Override public <T> byte[] serialize( T source ) { final Output output = new Output( 512 , 1024 * 8 ); kryo.writeClassAndObject( output, source ); return output.getBuffer(); } }