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();
	}
    }
}

