|
SerializationDemo |
|
1 // Example 9.1 SerializationDemo.java
2 //
3 //
4 // Copyright 2003 Bill Campbell and Ethan Bolker
5
6 import java.io.*;
7 import java.util.*;
8
9 // Test of Java serialization.
10 //
11 // %> java SerializationDemo
12 // Wrote: round blue Mon Jan 06 20:14:44 EST 2003
13 // Read: round null Mon Jan 06 20:14:44 EST 2003
14 //
15 // interesting observations:
16 //
17 // %> wc -c SerializationDemo* tmp
18 // 1207 SerializationDemo$Circle.class
19 // 1611 SerializationDemo.class
20 // 3221 SerializationDemo.java
21 // 271 tmp
22 //
23 // the "strings" command finds ascii strings in a file
24 //
25 // %> strings SerializationDemo.class | wc
26 // 45 45 813
27 //
28 // %> strings tmp
29 // SerializationDemo$Circle?
30 // attributest
31 // Ljava/util/Map;L
32 // selft
33 // LSerializationDemo$Circle;xpsr
34 // java.util.HashMap
35 // loadFactorI
36 // thresholdxp?@
37 // datesr
38 // java.util.Datehj
39 // thisq
40 // namet
41 // roundxq
42 //
43 // %> strings tmp | wc -c
44 // 180
45
46 public class SerializationDemo
47 {
48 public static void main (String[] args)
49 {
50 Circle circle = new Circle("round");
51 write(circle,"tmp");
52 System.out.println("Wrote: "+ circle);
53
54 Circle circleCopy = (Circle)read("tmp");
55 System.out.println("Read: " + circleCopy);
56 }
57
58 public static void write (Object obj, String pathname)
59 {
60 try {
61 FileOutputStream f = new FileOutputStream(pathname);
62 ObjectOutput s = new ObjectOutputStream(f);
63 s.writeObject(obj);
64 s.flush(); s.close(); f.close();
65 } catch (Exception e) { e.printStackTrace(); }
66 }
67
68 public static Object read(String pathname)
69 {
70 try {
71 Object obj;
72 FileInputStream in = new FileInputStream(pathname);
73 ObjectInputStream s = new ObjectInputStream(in);
74 obj = s.readObject();
75 s.close(); in.close();
76 return(obj);
77 }
78 catch (Exception e) {
79 e.printStackTrace();
80 }
81 return(null);
82 }
83
84 // To implement the Serializable interface you just _say_ so.
85 // You don't have to _do_ anything, although you may choose to
86 // overwrite the writeObject() and readObject() methods.
87
88 private static class Circle implements Serializable
89 {
90 private Circle self; // a circular reference
91 private Map attributes; // saved with its contents
92
93 // Don't bother saving whatever the current color
94 //(user settable) happens to be:
95 transient private String color;
96
97 Circle(String name)
98 {
99 attributes = new HashMap();
100 attributes.put("this", this); // a circular reference
101 attributes.put("name", name);
102 attributes.put("date", new Date());
103 this.color = "blue";
104 self = this;
105 }
106
107 public void setColor(String color)
108 {
109 this.color = color;
110 }
111
112 // NOTE: serialization does not call toString-- it calls
113 // a smarter serialization method.
114 public String toString()
115 {
116 return( (String)attributes.get("name") + " " +
117 color + " " + (Date)attributes.get("date") );
118 }
119 }
120 }
121
|
SerializationDemo |
|