import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.io.Serializable; public class Outer1 implements Serializable { String outerField = "outerField"; Inner1 inner = new Inner1(); public void output() { printString(outerField); inner.output(); } private void printString(String s) { System.out.println("printString(" + s + ")"); } private class Inner1 implements Serializable { String innerField = "innerField"; public void output() { printString(innerField); } } public static void main(String[] args) { try { Outer1 before = new Outer1(); System.out.println("Before"); before.output(); File tf = File.createTempFile("jvser", "obj"); FileOutputStream fos = new FileOutputStream(tf); ObjectOutputStream oos = new ObjectOutputStream(fos); oos.writeObject(before); oos.flush(); fos.close(); FileInputStream fis = new FileInputStream(tf); ObjectInputStream ois = new ObjectInputStream(fis); Outer1 after = (Outer1)ois.readObject(); fis.close(); System.out.println("After"); after.output(); tf.delete(); } catch (Exception e) { e.printStackTrace(); } } }