Liste.java

import java.util.*;
import java.io.*;
class Liste implements Serializable {
  private int val;
  private Liste next;
  public Liste(int val, Liste next) {
    this.val = val;
    this.next = next;
  }
  /**
   * Méthode remplaçant l'objet courant par un objet
   * ListeString au moment de sa sérialisation.
   */
  Object writeReplace() throws ObjectStreamException {
    System.out.println("writeReplace()");
    return new ListeString(this);
  }
  public String toString() {
    if (next != null)
      return Integer.toString(val) + " " + next;
    return Integer.toString(val);
  }
  /** Exemple de sauvegarde avec remplacement puis relecture.  */
  public static void main(String[] args)
    throws IOException, ClassNotFoundException {
    PipedOutputStream pipeOut = new PipedOutputStream();
    PipedInputStream pipeIn = new PipedInputStream(pipeOut);
    ObjectOutputStream out = new ObjectOutputStream(pipeOut);
    ObjectInputStream in = new ObjectInputStream(pipeIn);
    Liste l = new Liste(1, new Liste(2,null));
    System.out.println(l);
    out.writeObject(l);
    out.close();
    System.out.println("Objet sauvé");
    Liste lr = (Liste)in.readObject();
    System.out.println(lr);
  }
  /** Classe des objets de remplacement */
  static class ListeString implements Serializable {
    private String s;
    ListeString(Liste l) {
      StringBuffer buffer = new StringBuffer();
      for( ; l!=null; l=l.next) {
    buffer.append(Integer.toString(l.val)).append(" ");
      }
      this.s = buffer.toString();;
    }
    /**
     * Méthode de remplacement de l'objet lu dans le flot
     * par un objet de la classe Liste;
     */
    Object readResolve() throws ObjectStreamException {
      System.out.println("readResolve()");
      StringTokenizer st = new StringTokenizer(s);
      return resolve(st);
    }
    
    Liste resolve(StringTokenizer st) {
      if (st.hasMoreTokens()) {
    int val = Integer.parseInt(st.nextToken());
    return new Liste(val, resolve(st));
      }
      return null;
    }
  }
}