83 lines
2.1 KiB
Java
83 lines
2.1 KiB
Java
//: references/Compete.java
|
|
// ©2015 MindView LLC: see Copyright.txt
|
|
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 = 100000;
|
|
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(Thing2 a1 : a) {
|
|
o.writeObject(a1);
|
|
}
|
|
// 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");
|
|
}
|
|
} /* Output:
|
|
Duplication via serialization: 250 Milliseconds
|
|
Duplication via cloning: 15 Milliseconds
|
|
*///:~
|