zoukankan      html  css  js  c++  java
  • 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 + "
    " + 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:
    " + 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 ///:~
  • 相关阅读:
    程序员偷偷深爱的9个不良编程习惯
    JQuery实现放大镜
    ACM1995
    liubo.im
    Linux中的一些点
    EPOLL使用详解
    Elays'Blog
    c#数据库解析
    codeforces #332 div 2 D. Spongebob and Squares
    类型
  • 原文地址:https://www.cnblogs.com/skyfffire/p/6840338.html
Copyright © 2011-2022 走看看