Mega Code Archive

 
Categories / Java / Class
 

Serializable and clone

// : appendixa:Compete.java // From 'Thinking in Java, 3rd ed.' (c) Bruce Eckel 2002 // www.BruceEckel.com. See copyright notice in CopyRight.txt. import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.io.Serializable; class Thing1 implements Serializable { } class Thing2 implements Serializable {   Thing1 o1 = new Thing1(); } class Thing3 implements Cloneable {   public Object clone() {     Object o = null;     try {       o = super.clone();     } catch (CloneNotSupportedException e) {       System.err.println("Thing3 can't clone");     }     return o;   } } class Thing4 implements Cloneable {   private Thing3 o3 = new Thing3();   public Object clone() {     Thing4 o = null;     try {       o = (Thing4) super.clone();     } catch (CloneNotSupportedException e) {       System.err.println("Thing4 can't clone");     }     // Clone the field, too:     o.o3 = (Thing3) o3.clone();     return o;   } } public class Compete {   public static final int SIZE = 25000;   public static void main(String[] args) throws Exception {     Thing2[] a = new Thing2[SIZE];     for (int i = 0; i < a.length; i++)       a[i] = new Thing2();     Thing4[] b = new Thing4[SIZE];     for (int i = 0; i < b.length; i++)       b[i] = new Thing4();     long t1 = System.currentTimeMillis();     ByteArrayOutputStream buf = new ByteArrayOutputStream();     ObjectOutputStream o = new ObjectOutputStream(buf);     for (int i = 0; i < a.length; i++)       o.writeObject(a[i]);     // Now get copies:     ObjectInputStream in = new ObjectInputStream(new ByteArrayInputStream(         buf.toByteArray()));     Thing2[] c = new Thing2[SIZE];     for (int i = 0; i < c.length; i++)       c[i] = (Thing2) in.readObject();     long t2 = System.currentTimeMillis();     System.out.println("Duplication via serialization: " + (t2 - t1)         + " Milliseconds");     // Now try cloning:     t1 = System.currentTimeMillis();     Thing4[] d = new Thing4[SIZE];     for (int i = 0; i < d.length; i++)       d[i] = (Thing4) b[i].clone();     t2 = System.currentTimeMillis();     System.out.println("Duplication via cloning: " + (t2 - t1)         + " Milliseconds");   } } ///:~