package org.mapdb.serializer;
import org.mapdb.DBException;
import org.mapdb.DataInput2;
import org.mapdb.DataOutput2;
import java.io.IOException;
/**
* Serialier for class. It takes a class loader as constructor param, by default it uses
* {@code Thread.currentThread().getContextClassLoader()}
*/
public class SerializerClass extends GroupSerializerObjectArray<Class<?>> {
protected final ClassLoader classLoader;
public SerializerClass(ClassLoader classLoader) {
this.classLoader = classLoader;
}
public SerializerClass(){
this(Thread.currentThread().getContextClassLoader());
}
@Override
public void serialize(DataOutput2 out, Class<?> value) throws IOException {
out.writeUTF(value.getName());
}
@Override
public Class<?> deserialize(DataInput2 in, int available) throws IOException {
try {
return classLoader.loadClass(in.readUTF());
} catch (ClassNotFoundException e) {
throw new DBException.SerializationError(e);
}
}
@Override
public boolean isTrusted() {
return true;
}
@Override
public boolean equals(Class<?> a1, Class<?> a2) {
return a1 == a2 || (a1.toString().equals(a2.toString()));
}
@Override
public int hashCode(Class<?> aClass, int seed) {
//class does not override identity hash code
return aClass.toString().hashCode();
}
}