• 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 ///:~
  • 相关阅读:
    vue 实现表格导出Excel
    基于canvas绘制的,Vue 图形验证码组件
    screenfull.js实现全屏功能
    学习笔记-Python基础2-表达式和运算符
    PHP里对数据库增删改查操作
    学习笔记-Python基础1-变量命名和声明、数据类型
    PHP类中的$this、self、parent关键字使用总结
    移动端页面中,有时需要禁止用户滑动屏幕
    正则表达式总结
    input输入框限制各类输入总结
  • 原文地址:https://www.cnblogs.com/skyfffire/p/6840338.html
Copyright © 2020-2023  润新知