package io.muoncore.codec.kryo; import com.esotericsoftware.kryo.Kryo; import com.esotericsoftware.kryo.io.Input; import com.esotericsoftware.kryo.io.Output; import io.muoncore.codec.MuonCodec; import io.muoncore.exception.MuonException; import java.lang.reflect.Type; public class KryoBinaryCodec implements MuonCodec { @Override public <T> T decode(byte[] encodedData, Type type) { if (!(type instanceof Class)) { throw new MuonException("Kryo codec does not support compound or parameterized types. Use plain classes instead"); } Kryo kryo = new Kryo(); Input input = new Input(encodedData); T decodedObject = kryo.readObject(input, (Class<T>) type); input.close(); return decodedObject; } @Override public byte[] encode(Object data) { Kryo kryo = new Kryo(); Output output = new Output(); output.setBuffer(new byte[5000]); kryo.writeObject(output, data); output.close(); return output.getBuffer(); } @Override public String getContentType() { return "x-muon/kryo"; } }