Mega Code Archive

 
Categories / Java / File Input Output
 

Simple use of Externalizable and a pitfall

// : c12:Blips.java // Simple use of Externalizable & a pitfall. // {Clean: Blips.out} // From 'Thinking in Java, 3rd ed.' (c) Bruce Eckel 2002 // www.BruceEckel.com. See copyright notice in CopyRight.txt. import java.io.Externalizable; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.ObjectInput; import java.io.ObjectInputStream; import java.io.ObjectOutput; import java.io.ObjectOutputStream; class Blip1 implements Externalizable {   public Blip1() {     System.out.println("Blip1 Constructor");   }   public void writeExternal(ObjectOutput out) throws IOException {     System.out.println("Blip1.writeExternal");   }   public void readExternal(ObjectInput in) throws IOException,       ClassNotFoundException {     System.out.println("Blip1.readExternal");   } } class Blip2 implements Externalizable {   Blip2() {     System.out.println("Blip2 Constructor");   }   public void writeExternal(ObjectOutput out) throws IOException {     System.out.println("Blip2.writeExternal");   }   public void readExternal(ObjectInput in) throws IOException,       ClassNotFoundException {     System.out.println("Blip2.readExternal");   } } public class Blips {   // Throw exceptions to console:   public static void main(String[] args) throws IOException,       ClassNotFoundException {     System.out.println("Constructing objects:");     Blip1 b1 = new Blip1();     Blip2 b2 = new Blip2();     ObjectOutputStream o = new ObjectOutputStream(new FileOutputStream(         "Blips.out"));     System.out.println("Saving objects:");     o.writeObject(b1);     o.writeObject(b2);     o.close();     // Now get them back:     ObjectInputStream in = new ObjectInputStream(new FileInputStream(         "Blips.out"));     System.out.println("Recovering b1:");     b1 = (Blip1) in.readObject();     // OOPS! Throws an exception:     //! System.out.println("Recovering b2:");     //! b2 = (Blip2)in.readObject();   } } ///:~