把文件对象的数据输入到内存中(对象反序列化) 输入(读):硬盘到内存中是 读取数据,所有方法一般和(read)有关
输出(写): 从内存中输出到硬盘(本地) 所以方法一般和write有关
// transient(转瞬即逝的意思) 修饰的成员变量不参与序列化了 [ˈtrænʃnt] 序列化之后这个成员将不会被显示
package com.itheima.d5_serializable;
import java.io.FileInputStream;
import java.io.ObjectInputStream;
/**
* 目标:学会进行对象反序化,使用对象字节输入流把文件中的对象数据回复成内存中的Java对象
*
*/
public class ObjectInputStreamDemo02 {
public static void main(String[] args) throws Exception{
// 1. 创建对象字节输入流管道包装成低级的输入流管道
ObjectInputStream is = new ObjectInputStream(new FileInputStream("io-app2/src/obj.txt"));
// 2. 调用对象字节输入流的反序列化方法 要强转成 学生对象
Student s = (Student) is.readObject(); // 将本地文件(硬盘) 输入(读写)到内存中
System.out.println(s); // 把对象恢复后输出
}
}
package com.itheima.d5_serializable;
import java.io.Serializable;
/**
* 对象如果要序列化,必须实现Serializable [ˈsɪˌriəˌlaɪzəbl] (可序列话的意思) 序列化接口
*/
public class Student implements Serializable {
private String name;
private String loginName;
// transient(转瞬即逝的意思) 修饰的成员变量不参与序列化了 序列化之后这个成员将不会被显示
private transient String passWord; // 如果之前被序列化一次,要重新再序列化,然后再进行反序列化
private int age;
public Student() {
}
public Student(String name, String loginName, String passWord, int age) {
this.name = name;
this.loginName = loginName;
this.passWord = passWord;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
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 int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", loginName='" + loginName + '\'' +
", passWord='" + passWord + '\'' +
", age=" + age +
'}';
}
}