67 lines
2.7 KiB
Java
67 lines
2.7 KiB
Java
package com.esotericsoftware.kryo.serializers;
|
|
|
|
import c.d.b.a.a;
|
|
import com.esotericsoftware.kryo.Kryo;
|
|
import com.esotericsoftware.kryo.KryoException;
|
|
import com.esotericsoftware.kryo.Serializer;
|
|
import com.esotericsoftware.kryo.io.Input;
|
|
import com.esotericsoftware.kryo.io.Output;
|
|
import com.esotericsoftware.kryo.util.ObjectMap;
|
|
import java.io.IOException;
|
|
import java.io.InputStream;
|
|
import java.io.ObjectInputStream;
|
|
import java.io.ObjectOutputStream;
|
|
import java.io.ObjectStreamClass;
|
|
public class JavaSerializer extends Serializer {
|
|
|
|
public static class ObjectInputStreamWithKryoClassLoader extends ObjectInputStream {
|
|
private final ClassLoader loader;
|
|
|
|
public ObjectInputStreamWithKryoClassLoader(InputStream inputStream, Kryo kryo) throws IOException {
|
|
super(inputStream);
|
|
this.loader = kryo.getClassLoader();
|
|
}
|
|
|
|
@Override // java.io.ObjectInputStream
|
|
public Class<?> resolveClass(ObjectStreamClass objectStreamClass) {
|
|
try {
|
|
return Class.forName(objectStreamClass.getName(), false, this.loader);
|
|
} catch (ClassNotFoundException e) {
|
|
StringBuilder L = a.L("Class not found: ");
|
|
L.append(objectStreamClass.getName());
|
|
throw new RuntimeException(L.toString(), e);
|
|
}
|
|
}
|
|
}
|
|
|
|
@Override // com.esotericsoftware.kryo.Serializer
|
|
public Object read(Kryo kryo, Input input, Class cls) {
|
|
try {
|
|
ObjectMap graphContext = kryo.getGraphContext();
|
|
ObjectInputStream objectInputStream = (ObjectInputStream) graphContext.get(this);
|
|
if (objectInputStream == null) {
|
|
objectInputStream = new ObjectInputStreamWithKryoClassLoader(input, kryo);
|
|
graphContext.put(this, objectInputStream);
|
|
}
|
|
return objectInputStream.readObject();
|
|
} catch (Exception e) {
|
|
throw new KryoException("Error during Java deserialization.", e);
|
|
}
|
|
}
|
|
|
|
@Override // com.esotericsoftware.kryo.Serializer
|
|
public void write(Kryo kryo, Output output, Object obj) {
|
|
try {
|
|
ObjectMap graphContext = kryo.getGraphContext();
|
|
ObjectOutputStream objectOutputStream = (ObjectOutputStream) graphContext.get(this);
|
|
if (objectOutputStream == null) {
|
|
objectOutputStream = new ObjectOutputStream(output);
|
|
graphContext.put(this, objectOutputStream);
|
|
}
|
|
objectOutputStream.writeObject(obj);
|
|
objectOutputStream.flush();
|
|
} catch (Exception e) {
|
|
throw new KryoException("Error during Java serialization.", e);
|
|
}
|
|
}
|
|
}
|