VersionObjectInputStream.java

import java.io.*;
import java.util.*;
public class VersionObjectInputStream extends ObjectInputStream {
  HashMap map = new HashMap();
  public VersionObjectInputStream(InputStream in) throws IOException {
    super(in);
  }
  protected Class resolveClass(ObjectStreamClass v)
    throws IOException, ClassNotFoundException  {
    // Lecture de la version dans le flot
    String version = (String) this.readObject();
    // Utilisation de la version pour charger la bonne classe
    ClassLoader loader = (ClassLoader) map.get(version);
    if (loader==null) {
      loader = new VersionClassLoader(version);
      if (loader==null)    throw new ClassNotFoundException();
      map.put(version,loader);
    }
    System.out.println(v.getName());
    return loader.loadClass(v.getName());
  }
  public static void main(String[] argv)
    throws IOException, ClassNotFoundException {
    VersionObjectInputStream in = new VersionObjectInputStream(System.in);
    Liste l = (Liste) in.readObject();
    System.out.println(l);
    in.close();
  }
}