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 Engine implements Externalizable {
private int numCylinders;
public Engine() {
}
Engine(int numCylinders) {
this.numCylinders = numCylinders;
}
int getNumCylinders() {
return numCylinders;
}
public void readExternal(ObjectInput in) throws IOException, ClassCastException {
System.out.println("READ-Engine");
numCylinders = in.readInt();
}
public void writeExternal(ObjectOutput out) throws IOException {
System.out.println("WRITE-Engine");
out.writeInt(numCylinders);
}
}
class Car implements Externalizable {
private int numTires;
private Engine e;
private String name;
public Car() {
}
Car(String name, int numTires, Engine e) {
this.name = name;
this.numTires = numTires;
this.e = e;
}
int getNumTires() {
return numTires;
}
Engine getEngine() {
return e;
}
String getName() {
return name;
}
public void readExternal(ObjectInput in) throws IOException, ClassCastException {
System.out.println("READ-Car");
numTires = in.readInt();
name = in.readUTF();
try {
e = (Engine) in.readObject();
} catch (ClassNotFoundException e) {
}
}
public void writeExternal(ObjectOutput out) throws IOException {
System.out.println("WRITE-Car");
out.writeInt(numTires);
out.writeUTF(name);
out.writeObject(e);
}
}
class EDemo {
public static void main(String[] args) throws Exception {
Car c1 = new Car("Some car", 4, new Engine(6));
ObjectOutputStream oos = null;
FileOutputStream fos = new FileOutputStream("car.ser");
oos = new ObjectOutputStream(fos);
oos.writeObject(c1);
ObjectInputStream ois = null;
FileInputStream fis = new FileInputStream("car.ser");
ois = new ObjectInputStream(fis);
Car c2 = (Car) ois.readObject();
System.out.println("Number of tires = " + c2.getNumTires());
System.out.println("Number of cylinders = " + c2.getEngine().getNumCylinders());
System.out.println("Name = " + c2.getName());
}
}