package ch18io;//: io/ExternalizableDemo.java // Reconstructing an externalizable object. import java.io.*; import static net.mindview.util.Print.*; /** * 利用Externalizable接口手动控制序列化 */ public class ExternalizableDemo implements Externalizable { private int i; private String s; // No initialization public ExternalizableDemo() { print("ExternalizableDemo Constructor"); // s, i not initialized } public ExternalizableDemo(String x, int a) { print("ExternalizableDemo(String x, int a)"); s = x; i = a; // s & i initialized only in non-default constructor. } public String toString() { return s + i; } public void writeExternal(ObjectOutput out) throws IOException { print("ExternalizableDemo.writeExternal"); // You must do this: out.writeObject(s); out.writeInt(i); } public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException { print("ExternalizableDemo.readExternal"); // You must do this: s = (String) in.readObject(); i = in.readInt(); } /** * 利用Externalizable接口手动控制序列化 * * @throws IOException * @throws ClassNotFoundException */ public void serial() throws IOException, ClassNotFoundException { print("Constructing objects:"); ExternalizableDemo b3 = new ExternalizableDemo("A String ", 47); print(b3); ObjectOutputStream o = new ObjectOutputStream(new FileOutputStream( "ExternalizableDemo.out")); print("Saving object:"); o.writeObject(b3); o.close(); // Now get it back: ObjectInputStream in = new ObjectInputStream(new FileInputStream( "ExternalizableDemo.out")); print("Recovering b3:"); b3 = (ExternalizableDemo) in.readObject(); print(b3); } } /* * Output: Constructing objects: ExternalizableDemo(String x, int a) A String 47 Saving * object: ExternalizableDemo.writeExternal Recovering b3: ExternalizableDemo Constructor * ExternalizableDemo.readExternal A String 47 */// :~