package com.limegroup.gnutella.util;
import java.io.IOException;
import java.io.InputStream;
import java.io.ObjectInputStream;
import java.io.ObjectStreamClass;
/**
* ObjectInputStream that converts serialized files using the old
* collections.jar package to newer java.util.* classes.
*
* Does not require collections.jar to be on the classpath.
*/
public class ConverterObjectInputStream extends ObjectInputStream {
/**
* Constructs a new ConverterObjectInputStream wrapping the specified
* InputStream.
*/
public ConverterObjectInputStream(InputStream in) throws IOException {
super(in);
}
/**
* Overriden to manually alter the class descriptor from
* com.sun.java.util.collections.* to java.util.*.
*
* Note that this does NOT require the original class to be loadable.
*/
protected ObjectStreamClass readClassDescriptor() throws
IOException, ClassNotFoundException {
ObjectStreamClass read = super.readClassDescriptor();
String className = read.getName();
// valid as-is.
if(!className.startsWith("com.sun.java.util.collections"))
return read;
// 29 == length of com.sun.java.util.collections
className = "java.util" + className.substring(29);
return ObjectStreamClass.lookup(Class.forName(className));
}
}