ListePrime.java

import java.util.*;
import java.io.*;
public class ListePrime implements Serializable {
  private int val;
  private ListePrime next;
  /** Déclaration du nom et du type de la donnée à sauver. */
  private static final ObjectStreamField[]
    serialPersistentFields = { new ObjectStreamField("s",String.class) };
  public ListePrime(int val, ListePrime next) {
    this.val = val; this.next = next;
  }
  /** Retourne une représentation textuelle de cette liste. */
  public String toString() {
    if (next != null) return Integer.toString(val) + " " + next;
    return Integer.toString(val);
  }
  /** Personnalisation de la sauvegarde des objets. */
  private void writeObject(ObjectOutputStream out) throws IOException {
    System.err.println("writeObject()");
    // Récupération de la description des données à sauver
    ObjectOutputStream.PutField fields = out.putFields();
    // Affectation d'une valeur à la donnée de nom s
    fields.put("s", toString());
    // Écriture des données
    out.writeFields();
  }
  /** Personnalisation de la lecture des objets. */  
  private void readObject(ObjectInputStream in)
    throws IOException, ClassNotFoundException {
    System.err.println("readObject()");
    // Lecture des données sérialisées
    ObjectInputStream.GetField fields = in.readFields();
    // Récupération de la valeur de la donnée de nom s
    // (si elle n'existe pas on utilise par défaut la valeur "")
    String s = (String)fields.get("s", "");
    // Reconstruction de la liste originale
    StringTokenizer st = new StringTokenizer(s);
    this.val = Integer.parseInt(st.nextToken());
    this.next = resolve(st);
  }
  /** Construit une instance de liste à partir du tokenizer. */
  ListePrime resolve(StringTokenizer st) {
    if (st.hasMoreTokens())
      return new ListePrime(Integer.parseInt(st.nextToken()),resolve(st));
    return null;
  }
  public static void main(String [] args)
    throws IOException, ClassNotFoundException {
    ListePrime l = new ListePrime(1, new ListePrime(2, null));
    System.out.println(l);
    File f = File.createTempFile("tempFile", "test");
    f.deleteOnExit(); // Effacer le fichier à la fin du programme
    ObjectOutputStream out =
      new ObjectOutputStream(new FileOutputStream(f));
    // Écriture de la liste
    out.writeObject(l);
    out.close();
    System.out.println("Objet sauvé");
    ObjectInputStream in =
      new ObjectInputStream(new FileInputStream(f));
    // Lecture de la liste
    ListePrime lPrime = (ListePrime)in.readObject();
    in.close();
    System.out.println(lPrime);
  }
}