2015-05-05 11:20:13 -07:00
|
|
|
//: references/Compete.java
|
|
|
|
import java.io.*;
|
|
|
|
|
|
|
|
class Thing1 implements Serializable {}
|
|
|
|
class Thing2 implements Serializable {
|
|
|
|
Thing1 o1 = new Thing1();
|
|
|
|
}
|
|
|
|
|
|
|
|
class Thing3 implements Cloneable {
|
|
|
|
@Override
|
|
|
|
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();
|
|
|
|
@Override
|
|
|
|
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);
|
2015-05-05 14:05:39 -07:00
|
|
|
for (Thing2 a1 : a) {
|
|
|
|
o.writeObject(a1);
|
|
|
|
}
|
2015-05-05 11:20:13 -07:00
|
|
|
// 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");
|
|
|
|
}
|
|
|
|
} ///:~
|