序列化和反序列化——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修飾的成員變量從根本就沒有儲存進檔案中去。