#transient(临时)关键字
为防止对象的敏感部分被序列化,一个办法是将自己的类实现为Externalizable,就象前面展示的那样。
这样一来,没有任何东西可以自动序列化,只能在writeExternal()明确序列化那些需要的部分。
然而,若操作的是一个 Serializable 对象,所有序列化操作都会自动进行。
为解决这个问题,可以用transient(临时)逐个字段地关闭序列化
为防止对象的敏感部分被序列化,一个办法是将自己的类实现为Externalizable,就象前面展示的那样。
这样一来,没有任何东西可以自动序列化,只能在writeExternal()明确序列化那些需要的部分。
然而,若操作的是一个 Serializable 对象,所有序列化操作都会自动进行。
为解决这个问题,可以用transient(临时)逐个字段地关闭序列化
由于Externalizable 对象默认时不保存它的任何字段,所以transient 关键字只能伴随Serializable 使用
package com.zy.chapter10;
import java.io.*;
class User implements Serializable{
private String name;
private transient String password;
User(){
System.out.println("user constructor 1");
}
User(String name,String password){
this.name=name;
this.password=password;
System.out.println("user constructor 2");
}
public String toString(){
return name+" "+password;
}
}
/**
*
* @ClassName TransientDemo.java
* @function function of treansient key word
* @author yiz
* @version V1.0
* @date 2018年1月11日
*/
public class TransientDemo {
public static void main(String[] args) {
User u1=new User("jack","123456");
try {
ObjectOutputStream objouts=new ObjectOutputStream(new FileOutputStream("TransientDemo.txt"));
objouts.writeObject(u1);
objouts.close();
ObjectInputStream objins=new ObjectInputStream(new FileInputStream("TransientDemo.txt"));
User u2=(User)objins.readObject();
objins.close();
System.out.println(u2);
} catch (Exception e) {
e.printStackTrace();
}
}
}
user constructor 2
jack null