import java.util.*; import java.io.*; import java.net.*; public class SerializableList extends ArrayList implements Externalizable { public void writeExternal(ObjectOutput out) throws IOException { out.writeInt(size()); for (int i = 0; i < size(); i++) { if (get(i) instanceof Serializable) { out.writeObject(get(i)); } else { out.writeObject(null); } } } public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException { int elementCount = in.readInt(); this.ensureCapacity(elementCount); for (int i = 0; i < elementCount; i++) { this.add(in.readObject()); } } public static void main(String[] args) throws Exception { SerializableList list = new SerializableList(); list.add("Element 1"); list.add(new Integer(9)); list.add(new URL("http://www.oreilly.com/")); // not Serializable list.add(new Socket("www.oreilly.com", 80)); list.add("Element 5"); list.add(new Integer(9)); list.add(new URL("http://www.oreilly.com/")); ByteArrayOutputStream bout = new ByteArrayOutputStream(); ObjectOutputStream temp = new ObjectOutputStream(bout); temp.writeObject(list); temp.close(); ByteArrayInputStream bin = new ByteArrayInputStream(bout.toByteArray()); ObjectInputStream oin = new ObjectInputStream(bin); List out = (List) oin.readObject(); Iterator iterator = out.iterator(); while (iterator.hasNext()) { System.out.println(iterator.next()); } } }