import java.io.Serializable; import java.io.*; class Data implements Serializable { private int i; Data(int x) { i = x; } public String toString() { return Integer.toString(i); } } public class Worm implements Serializable { private static int r() { return (int) (Math.random() * 10); } private Data[] datas = { new Data(r()), new Data(r()), new Data(r()) }; private Worm next; private char c; Worm(int i, char x) { System.out.println("worm constructor:" + i); c = x; if (--i > 0) { next = new Worm(i, (char) (x + 1)); } } Worm() { System.out.println("deault constructor"); } public String toString() { String s = " "; for (int i = 0; i < datas.length; i++) { s += datas[i].toString(); } if (next != null) { s += next.toString(); } return s; } public static void main(String[] args) { Worm w = new Worm(6, 'a'); System.out.println("w = " + w); try { ObjectOutputStream out = new ObjectOutputStream( new FileOutputStream("worm.out")); out.writeObject("Worm storage"); out.writeObject(w); out.close(); // Also flushes output ObjectInputStream in = new ObjectInputStream(new FileInputStream( "worm.out")); String s = (String) in.readObject(); Worm w2 = (Worm) in.readObject(); System.out.println(s + ", w2 = " + w2); } catch (Exception e) { e.printStackTrace(); } try { ByteArrayOutputStream bout = new ByteArrayOutputStream(); ObjectOutputStream out = new ObjectOutputStream(bout); out.writeObject("Worm storage"); out.writeObject(w); out.flush(); ObjectInputStream in = new ObjectInputStream( new ByteArrayInputStream(bout.toByteArray())); String s = (String) in.readObject(); Worm w3 = (Worm) in.readObject(); System.out.println(s + ", w3 = " + w3); } catch (Exception e) { e.printStackTrace(); } } }