

| 构造器 | 说明 |
|---|---|
| public ObjectOutputStream(OutputStream out) | 把字节输出流包装成对象字节输出流 |
| 方法名称 | 说明 |
|---|---|
| public final void writeObject(Object obj) | 将指定对象写入到磁盘文件中 |
package com.app.d5_serializable;
import java.io.Serializable;
/**
定义学生类:
对象如果要序列化,必须实现 Serializable(序列化接口)
*/
public class Student implements Serializable {
/**
学生属性:姓名、年龄、登录名称、密码
*/
private String name;
private int age;
private String loginName;
private String passWord;
public Student() {
}
public Student(String name, int age, String loginName, String passWord) {
this.name = name;
this.age = age;
this.loginName = loginName;
this.passWord = passWord;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
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;
}
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", age=" + age +
", loginName='" + loginName + '\'' +
", passWord='" + passWord + '\'' +
'}';
}
}
package com.app.d5_serializable;
import java.io.FileOutputStream;
import java.io.ObjectOutputStream;
/**
目标:学会对象序列化,使用 ObjectOutputStream 把内存中的对象存入到磁盘文件中。
*/
public class ObjectOutputStreamDemo01 {
public static void main(String[] args) {
// 1、创建学生对象
Student s = new Student("吴磊", 22, "wulei", "123abc");
try (
// 2、对象序列化:使用对象字节输出流包装字节输出流
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("day11-io2-app/src/obj.txt"));
) {
// 3、直接调用序列化方法
oos.writeObject(s);
System.out.println("对象序列化完成~~");
}catch (Exception e) {
e.printStackTrace();
}
}
}

1、对象序列化的含义是啥?
2、对象序列化用到哪个流?
3、序列化对象的要求是怎么样的?


| 构造器 | 说明 |
|---|---|
| public ObjectInputStream(InputStream in) | 把字节输入流包装成对象字节输入流 |
| 方法名称 | 说明 |
|---|---|
| public final Object readObject() | 把存储到磁盘文件中的对象数据恢复成内存中的对象返回 |
package com.app.d5_serializable;
import java.io.FileInputStream;
import java.io.ObjectInputStream;
/**
目标:学会对象反序列化:使用 ObjectInputStream 把磁盘文件中的对象数据恢复成内存中的Java对象
*/
public class ObjectInputStreamDemo02 {
public static void main(String[] args) {
try(
// 1、创建对象字节输入流包装字节输入流
ObjectInputStream ois = new ObjectInputStream(new FileInputStream("day11-io2-app/src/obj.txt"));
) {
// 2、调用对象字节输入流的反序列化方法,将磁盘文件中的对象数据恢复成内存中的Java对象
Student s = (Student) ois.readObject();
System.out.println("反序列化完成~~");
System.out.println(s);
}catch (Exception e) {
e.printStackTrace();
}
}
}
反序列化完成~~
Student{name='吴磊', age=22, loginName='wulei', passWord='123abc'}
Process finished with exit code 0
实际开发中,如果将对象的所有信息都序列化到磁盘文件中,那么有些隐私信息容易被泄露出去。

所以,只要是不想泄露某些信息出去的,可以使用 transient 修饰成员变量

现在运行看看





1、对象反序列化的含义是啥?
2、对象反序列化用到了哪个流?