对象的本质是用来组织和存储数据的,对象本身也是数据。那么,能不能将对象存储到 硬盘上的文件中呢?能不能将对象通过网络传输到另一个电脑呢?我们可以通过序列化和 反序列化来实现这些需求。
当两个进程远程通信时,彼此可以发送各种类型的数据。 无论是何种类型的数据,都 会以二进制序列的形式在网络上传送。比如,我们可以通过 http 协议发送字符串信息;我 们也可以在网络上直接发送 Java 对象。发送方需要把这个 Java 对象转换为字节序列,才能 在网络上传送;接收方则需要把字节序列再恢复为 Java 对象才能正常读取。
把 Java 对象转换为字节序列的过程称为对象的序列化。把字节序列恢复为 Java 对象的 过程称为对象的反序列化
 对象序列化的作用有如下两种:
  持久化: 把对象的字节序列永久地保存到硬盘上,通常存放在一个文件中。
  网络通信:在网络上传送对象的字节序列。比如:服务器之间的数据通信、对象传 递。
ObjectOutputStream 代表对象输出流,它的 writeObject(Object obj)方法可对参数指定的 obj 对象进行序列化,把得到的字节序列写到一个目标输出流中。
ObjectInputStream 代表对象输入流,它的 readObject()方法从一个源输入流中读取字节 序列,再把它们反序列化为一个对象,并将其返回。
 只有实现了 Serializable 接口的类的对象才能被序列化。Serializable 接口是一个空接口, 只起到标记作用。
package com.yqq.app9;
import lombok.*;
import java.io.Serializable;
/**
 * @Author yqq
 * @Date 2021/11/15 20:49
 * @Version 1.0
 */
public class Users implements Serializable {
    private int id;
    private String name;
    private String age;
}package com.yqq.app9;
import java.io.FileOutputStream;
import java.io.ObjectOutputStream;
/**
 * @Author yqq
 * @Date 2021/11/15 20:54
 * @Version 1.0
 */
public class ObjectOutputStreamObjectType {
    public static void main(String[] args) {
        ObjectOutputStream oos = null;
        try {
            oos = new ObjectOutputStream(new FileOutputStream("d:/yqq1.txt"));
            Users user = Users.builder()
                    .id(1)
                    .name("易青青")
                    .age("18岁")
                    .build();
            oos.writeObject(user);
            oos.flush();
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            try {
                if(oos!=null)
                    oos.close();
            }catch (Exception e){
                e.printStackTrace();
            }
        }
    }
}package com.yqq.app9;
import java.io.FileInputStream;
import java.io.ObjectInputStream;
/**
 * @Author yqq
 * @Date 2021/11/15 21:01
 * @Version 1.0
 */
public class ObjectInputStreamObjectType {
    public static void main(String[] args) {
        ObjectInputStream ois = null;
        try {
            ois = new ObjectInputStream(new FileInputStream("d:/yqq1.txt"));
            Users user = (Users) ois.readObject();
            System.out.println(user);
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            try {
                if(ois!=null)
                    ois.close();
            }catch (Exception e){
                e.printStackTrace();
            }
        }
    }
}
                
                










