个人博客:skyfffire.cn

Serializable与transient的联合使用:动态管理成员属性——《Thinking in Java》随笔033

 1 //: SerialCtl.java
 2 // 下面这个Demo演示如何使用Serializable和transient关键字来动态管理成员属性
 3 // 主要思想是添加(不是复写与实现)write与read的方法(注意方法签名)
 4 
 5 package c10;
 6 
 7 import java.io.ByteArrayInputStream;
 8 import java.io.ByteArrayOutputStream;
 9 import java.io.IOException;
10 import java.io.ObjectInputStream;
11 import java.io.ObjectOutputStream;
12 import java.io.Serializable;
13 
14 /**
15 *    @time:         上午10:01:53
16 *    @date:         2017年5月11日
17 *    @auther:    skyfffire
18 *    @version:    v0.1
19 */
20 public class SerialCtl implements Serializable {
21     private static final long serialVersionUID = -7532371062424412783L;
22 
23     String a = null;
24     transient String b = null;
25     
26     public SerialCtl(String aa, String bb) {
27         a = "Not Transient: " + aa;
28         b = "Transient: " + bb;
29     }
30     
31     public String toString() {
32         return a + "\n" + b;
33     }
34     
35     private void writeObject(ObjectOutputStream stream) 
36             throws IOException {
37         stream.defaultWriteObject();
38         stream.writeObject(b);
39     }
40     
41     private void readObject(ObjectInputStream stream) 
42             throws IOException, ClassNotFoundException {
43         stream.defaultReadObject();
44         b = (String) stream.readObject();
45     }
46     
47     public static void main(String[] args) {
48         SerialCtl sc = new SerialCtl("Test1", "Test2");
49         
50         System.out.println("Before:\n" + sc);
51         
52         ByteArrayOutputStream buf = 
53                 new ByteArrayOutputStream();
54 
55         try {
56             ObjectOutputStream o = new ObjectOutputStream(buf);
57             o.writeObject(sc);
58             o.close();
59             
60             ObjectInputStream in = 
61                     new ObjectInputStream(
62                             new ByteArrayInputStream(buf.toByteArray()));
63             sc = (SerialCtl) in.readObject();
64             in.close();
65             System.out.println(sc);
66         } catch (Exception e) {
67             e.printStackTrace();
68         }
69     }
70 }
71 
72 ///:~

 

posted @ 2017-05-11 12:16  skyfffire  阅读(242)  评论(0编辑  收藏  举报
个人博客:skyfffire.cn