序列化和反序列化——Serializable和transient关键字
Serializable:序列化,通过Serializable接口将Java对象等内容转换成数据进行运输与保存。
transient:反序列化,由transient修饰的成员变量不会进行序列化保存。
package Serializable_;
import java.io.Serializable;
public class User implements Serializable {
/**
* 序列版本号
*/
private static final long serialVersionUID = 1L;
private String loginName;
private transient String passWord;// 反序列化
private String userName;
public User() {
}
public User(String loginName,String passWord, String userName) {
this.loginName=loginName;
this.passWord = passWord;
this.userName = userName;
}
public String getLoginName() {
return loginName;
}
public void setLoginName(String loginName) {
this.loginName = loginName;
}
public String getPassWord() {
return passWord;
}
public void setPassWord(String passWord) {
this.passWord = passWord;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
@Override
public String toString() {
return "User [loginName=" + loginName + ", passWord=" + passWord + ", userName=" + userName + "]";
}
}
package Serializable_;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
public class SerializableDome {
public static void main(String[] args) throws Exception, IOException {
// 序列化存储
ObjectOutputStream owt = new ObjectOutputStream(new FileOutputStream("D:\\试用文档\\05.dat"));
User user = new User("蒙奇.D.路飞", "123456", "路飞");
owt.writeObject(user);
owt.flush();
owt.close();
// 反序列化输出
ObjectInputStream ois = new ObjectInputStream(new FileInputStream("D:\\试用文档\\05.dat"));
User user1 = (User) ois.readObject();// 反序列化
System.out.println(user1);
System.out.println(user1.getPassWord());
ois.close();
}
}
可以看出不管怎样都不能得到passWord的值
打开文件看,只有loginName和userName,而passWord并没有出现,所以说被transient修饰的成员变量从根本就没有保存进文件中去。