java(十四):transient与序列化

来源:互联网 发布:创意美工作品图片大全 编辑:程序博客网 时间:2024/05/19 17:07

transient译作临时的,瞬态的意思,指的是在序列化的时候,被该关键字修饰的变量将不会被持久化。
比如用户的密码,身份证号,当希望将其保存到文件而又过滤掉这些敏感信息时,就可以使用该关键字修饰。
说道序列化,需要说明的是,static关键字不会被被序列化也不会被反序列化,因为static是类成员,在反序列化时(其实等同于初始化),就会使用类里的初始值,然而需要注意的是,内存中如果已经存在该类,且该类的该静态变量已经赋予了新值,则被序列化的类就会使用新的值。
下面的参考例子出自Java transient关键字使用小记:

public class Test01{    public static void main(String[] args){        User user = new User();        user.setUsername("Alexia");        user.setPasswd("123456");        System.out.println("read before Serializable: ");        System.out.println("username: " + user.getUsername());        System.err.println("password: " + user.getPasswd());        try {            ObjectOutputStream os = new ObjectOutputStream(                    new FileOutputStream("C:\\Users\\xxx\\Desktop/user.txt"));            os.writeObject(user); // 将User对象写进文件            os.flush();            os.close();        } catch (FileNotFoundException e) {            e.printStackTrace();        } catch (IOException e) {            e.printStackTrace();        }        try {            // 在反序列化之前改变username的值            //User.username = "jiang";            ObjectInputStream is = new ObjectInputStream(new FileInputStream(                    "C:\\Users\\xxx\\Desktop/user.txt"));            user = (User) is.readObject(); // 从流中读取User的数据            is.close();            System.out.println("\nread after Serializable: ");            System.out.println("username: " + user.getUsername());            System.err.println("password: " + user.getPasswd());        } catch (FileNotFoundException e) {            e.printStackTrace();        } catch (IOException e) {            e.printStackTrace();        } catch (ClassNotFoundException e) {            e.printStackTrace();        }    }}class User implements Serializable {    private static final long serialVersionUID = 8294180014912103005L;    public static String username;    private transient String passwd;    public String getUsername() {return username;}    public void setUsername(String username) {this.username = username;}    public String getPasswd() {return passwd;}    public void setPasswd(String passwd) {this.passwd = passwd;}}
原创粉丝点击