MST

星途 面试题库

面试题:Java中对象序列化与反序列化的基本步骤

在Java I/O中,简述实现对象序列化与反序列化的基本步骤,并且说明涉及到哪些关键的接口或类。
15.7万 热度难度
编程语言Java

知识考点

AI 面试

面试题答案

一键面试

实现对象序列化的基本步骤:

  1. 实现 Serializable 接口:让需要被序列化的类实现 java.io.Serializable 接口,该接口是一个标记接口,没有任何方法。例如:
import java.io.Serializable;

public class MyClass implements Serializable {
    private String data;

    public MyClass(String data) {
        this.data = data;
    }
}
  1. 创建 ObjectOutputStream 对象:使用 FileOutputStream 等字节输出流创建 ObjectOutputStream 对象,用于将对象写入到输出流中。
import java.io.FileOutputStream;
import java.io.ObjectOutputStream;

public class SerializeExample {
    public static void main(String[] args) {
        MyClass obj = new MyClass("Hello, Serialization!");
        try (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("myobject.ser"))) {
            oos.writeObject(obj);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

实现对象反序列化的基本步骤:

  1. 创建 ObjectInputStream 对象:使用 FileInputStream 等字节输入流创建 ObjectInputStream 对象,用于从输入流中读取对象。
  2. 调用 readObject 方法:通过 ObjectInputStreamreadObject 方法读取对象,并将其强制转换为原来的类型。
import java.io.FileInputStream;
import java.io.ObjectInputStream;

public class DeserializeExample {
    public static void main(String[] args) {
        try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream("myobject.ser"))) {
            MyClass obj = (MyClass) ois.readObject();
            System.out.println(obj.data);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

关键的接口或类:

  1. Serializable 接口:标记接口,用于标识一个类可以被序列化。实现该接口的类的对象可以被写入到 ObjectOutputStream 中。
  2. ObjectOutputStream:用于将对象写入到输出流,提供了 writeObject 方法来序列化对象。
  3. ObjectInputStream:用于从输入流读取对象,提供了 readObject 方法来反序列化对象。
  4. Externalizable 接口:该接口继承自 Serializable,提供了更细粒度的控制对象序列化和反序列化的方法,实现该接口的类需要实现 writeExternalreadExternal 方法来自定义序列化和反序列化过程。但相比直接实现 Serializable 接口,使用 Externalizable 接口更复杂,需要更多手动编码。