package rocks.inspectit.shared.all.serializer; import java.util.Map; import com.esotericsoftware.kryo.io.Input; import com.esotericsoftware.kryo.io.Output; /** * Generic interface for serializer to be used in inspectIT. The interface defines only two methods, * one for serialization and one from the serialization. * * @author Ivan Senic * */ public interface ISerializer { /** * Serialize the object into bytes and puts the bytes in the supplied {@link Output}. All * operations for preparing the output have to be performed before calling this method. The * {@link Output#flush()} will be called after the serialization. * * @param object * Object to serialize. * @param output * {@link Output} to hold the serialized bytes. * @throws SerializationException * Serialization exception is thrown when serialization could not be performed. */ void serialize(Object object, Output output) throws SerializationException; /** * Serialize the object into bytes and puts the bytes in the supplied {@link Output}. All * operations for preparing the output have to be performed before calling this method. The * {@link Output#flush()} will be called after the serialization. * <p> * This method allows the caller to pass the map which will be added to the kryo graph context, * so that any preference can be passed to the serializer expecting them. * * @param object * Object to serialize. * @param output * {@link Output} to hold the serialized bytes. * @param kryoPreferences * Map of preferences to be put into the context before serialization. * @throws SerializationException * Serialization exception is thrown when serialization could not be performed. */ void serialize(Object object, Output output, Map<?, ?> kryoPreferences) throws SerializationException; /** * De-serialize the bytes provided by the {@link Input}. It is responsibility of the caller to * set up the input correctly. The way bytes are read, is defined in the implementing classes. * * @param input * {@link Input} that provides the bytes. * @return Returns the de-serialized object. * @throws SerializationException * If de-serialization fails. */ Object deserialize(Input input) throws SerializationException; /** * Returns result of the Kryo copy operation. Effectively clones the object. * * @param <T> * type of the object * @param object * Object to be copied * @return Cloned instance */ <T> T copy(T object); }