zoukankan      html  css  js  c++  java
  • Java关键字-transient

      transient 关键字的作用是控制变量的序列化,在变量声明前加上该关键字,可以阻止该变量被序列化到文件中。

    示例:

    项目A:序列化对象类

    package com.java.serializable;
    
    import java.io.Serializable;
    
    public class Class04 implements Serializable {
        // 序列化ID
        private static final long serialVersionUID = 1L;
        // 昵称
        private String nickName;
        // 关键字transient修饰,该变量无法被序列化
        private transient int age = 26;
        // 关键字transient修饰,该变量无法被序列化
        private transient String sex = "man";
        // 以下省略setter、getter方法
    }
    View Code

    项目A:序列化对象工具类

    package com.java.serializable;
    
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.ObjectOutputStream;
    
    public class CtestA04 {
        public static void main(String[] args) {
            serializeObjectToFile();
        }
        private static final String PATH = "F:\objFile.txt";
        // 序列化对象,转换成二进制数据存储到文件objFile.txt
        private static void serializeObjectToFile() {
            ObjectOutputStream oos = null;
            try {
                oos = new ObjectOutputStream(new FileOutputStream(PATH));
                Class04 classObj = new Class04();
                classObj.setNickName("nickName");
                oos.writeObject(classObj);
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                if(null != oos) {
                    try {
                        oos.close();
                    } catch (IOException e) {}
                }
            }
        }
    }
    View Code

    项目B:反序列化对象

    package com.java.serializable;
    
    import java.io.Serializable;
    
    public class Class04 implements Serializable {
        private static final long serialVersionUID = 1L;
        private String nickName;
        private int age;
        private String sex;
        // 以下省略setter、getter方法
    }
    View Code

    项目B:反序列化对象工具类

    package com.java.serializable;
    
    import java.io.FileInputStream;
    import java.io.IOException;
    import java.io.ObjectInputStream;
    
    public class CtestB04 {
    
        public static void main(String[] args) {
            reverseSerializeFileToObject();
        }
        // 存储Java对象二进制数据的文件
        private static final String PATH = "F:\objFile.txt";
        /**
         * 将二进制文件反序列化为java的object对象
         * 
         * 反序列化条件:
         * 1.java类的包名一致
         * 2.java类中变量名,变量类型一致
         * 3.序列化ID一致
         */
        private static void reverseSerializeFileToObject() {
            ObjectInputStream ois = null;
            try {
                ois = new ObjectInputStream(new FileInputStream(PATH));
                Class04 classObj = (Class04) ois.readObject();
                System.out.println("classObj.nickName="+classObj.getNickName());
                System.out.println("classObj.age="+classObj.getAge());
                System.out.println("classObj.sex="+classObj.getSex());
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                if(null != ois) {
                    try {
                        ois.close();
                    } catch (IOException e) {}
                }
            }
        }
    }
    View Code

    执行结果如下:

    System.out.println("classObj.nickName="+classObj.getNickName());// classObj.nickName=nickName;

    成员变量nickName,可以正常读取值。

    System.out.println("classObj.age="+classObj.getAge());// classObj.age=0
    System.out.println("classObj.sex="+classObj.getSex());// classObj.sex=null

    使用transient 关键字修饰的成员变量age和sex,值为null,说明这两个变量并没有被序列化到二进制文件中。

  • 相关阅读:
    MPLab X 配置字的设置
    System.Windows.Forms.Timer定时器的“自毁”
    单片机部分缩写对照
    我的艰辛之路——2012年个人总结之三
    浏览器IE6不支持的CSS样式的选择符[转]
    SVN 用户权限管理[转]
    VC++ 随机数生成方案选择[转]
    GB/T 77142005参考文献规范[转]
    正则表达式备忘[转]
    文档、视图、框架窗口、文档模板之间的相互关系【转】
  • 原文地址:https://www.cnblogs.com/517cn/p/10872871.html
Copyright © 2011-2022 走看看