標籤:tostring 屬性 catch new array try auth pack otf
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:5316 * @date: 2017年5月11日17 * @auther: skyfffire18 * @version: v0.119 */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 ///:~
Serializable與transient的聯合使用:動態管理成員屬性——《Thinking in Java》隨筆033