43 lines
No EOL
2 KiB
Java
43 lines
No EOL
2 KiB
Java
package StevenDimDoors.mod_pocketDim;
|
|
import java.io.IOException;
|
|
import java.io.InputStream;
|
|
import java.io.InvalidClassException;
|
|
import java.io.ObjectInputStream;
|
|
import java.io.ObjectStreamClass;
|
|
import java.util.logging.Logger;
|
|
|
|
|
|
public class ObjectSaveInputStream extends ObjectInputStream {
|
|
|
|
// private static Logger logger = LoggerFactory.getLogger(ObjectSaveInputStream.class);
|
|
|
|
public ObjectSaveInputStream(InputStream in) throws IOException {
|
|
super(in);
|
|
}
|
|
|
|
@Override
|
|
protected ObjectStreamClass readClassDescriptor() throws IOException, ClassNotFoundException {
|
|
ObjectStreamClass resultClassDescriptor = super.readClassDescriptor(); // initially streams descriptor
|
|
Class localClass; // the class in the local JVM that this descriptor represents.
|
|
try {
|
|
localClass = Class.forName(resultClassDescriptor.getName());
|
|
} catch (ClassNotFoundException e) {
|
|
// logger.error("No local class for " + resultClassDescriptor.getName(), e);
|
|
return resultClassDescriptor;
|
|
}
|
|
ObjectStreamClass localClassDescriptor = ObjectStreamClass.lookup(localClass);
|
|
if (localClassDescriptor != null) { // only if class implements serializable
|
|
final long localSUID = localClassDescriptor.getSerialVersionUID();
|
|
final long streamSUID = resultClassDescriptor.getSerialVersionUID();
|
|
if (streamSUID != localSUID) { // check for serialVersionUID mismatch.
|
|
final StringBuffer s = new StringBuffer("Overriding serialized class version mismatch: ");
|
|
s.append("local serialVersionUID = ").append(localSUID);
|
|
s.append(" stream serialVersionUID = ").append(streamSUID);
|
|
Exception e = new InvalidClassException(s.toString());
|
|
// logger.error("Potentially Fatal Deserialization Operation.", e);
|
|
resultClassDescriptor = localClassDescriptor; // Use local class descriptor for deserialization
|
|
}
|
|
}
|
|
return resultClassDescriptor;
|
|
}
|
|
} |