import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.io.Serializable; public class Outer3 implements Serializable { String outerField = "outerField"; Inner3 inner = new Inner3(); public void output() { printString(outerField); inner.output(); } private void printString(String s) { System.out.println("printString(" + s + ")"); } private class Inner3 implements Serializable { transient String innerField = "innerField"; public void output() { printString(innerField); } private void writeObject(ObjectOutputStream oos) throws IOException { oos.defaultWriteObject(); oos.writeObject(innerField); } private void readObject(ObjectInputStream ois) throws IOException, ClassNotFoundException { ois.defaultReadObject(); innerField = (String)ois.readObject(); } } public static void main(String[] args) { try { Outer3 before = new Outer3(); 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); Outer3 after = (Outer3)ois.readObject(); fis.close(); System.out.println("After"); after.output(); tf.delete(); } catch (Exception e) { e.printStackTrace(); } } }