欢迎访问宙启技术站
智能推送

使用new()方法实现对象的序列化与反序列化

发布时间:2024-01-06 08:27:13

对象的序列化是指将对象转换成字节流的过程,以便于在网络传输或存储到本地文件中。反序列化则是将字节流转换回对象的过程。在Java中,可以通过实现 Serializable 接口来实现对象的序列化与反序列化。

首先,需要在需要序列化的类上实现 Serializable 接口,该接口没有任何方法,只是作为一个标识接口,用来表示该类是可以序列化的。例如,我们创建一个名为 Student 的类来演示:

import java.io.Serializable;

public class Student implements Serializable {
    private String name;
    private int age;
    
    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }
    
    public String getName() {
        return name;
    }
    
    public int getAge() {
        return age;
    }
}

接下来,我们可以使用 ObjectOutputStream 来实现对象的序列化,使用 ObjectInputStream 来实现对象的反序列化。下面是一个示例:

import java.io.*;

public class SerializationExample {
    public static void main(String[] args) {
        // 序列化对象
        Student student = new Student("John", 20);
        try {
            // 创建 ObjectOutputStream 对象输出流
            FileOutputStream fos = new FileOutputStream("student.ser");
            ObjectOutputStream oos = new ObjectOutputStream(fos);
            // 写入对象
            oos.writeObject(student);
            // 关闭流
            oos.close();
            fos.close();
            System.out.println("Serialization complete.");
        } catch (IOException e) {
            e.printStackTrace();
        }
        
        // 反序列化对象
        try {
            // 创建 ObjectInputStream 对象输入流
            FileInputStream fis = new FileInputStream("student.ser");
            ObjectInputStream ois = new ObjectInputStream(fis);
            // 读取对象
            Student deserializedStudent = (Student) ois.readObject();
            // 关闭流
            ois.close();
            fis.close();
            // 打印对象信息
            System.out.println("Deserialized Student:");
            System.out.println("Name: " + deserializedStudent.getName());
            System.out.println("Age: " + deserializedStudent.getAge());
        } catch (IOException | ClassNotFoundException e) {
            e.printStackTrace();
        }
    }
}

在上述示例中,我们首先创建一个 Student 对象并将其序列化到文件 student.ser 中。然后通过反序列化,将该文件中的字节流转换回 Student 对象,并打印出对象的信息。

需要注意的是,对象的序列化与反序列化都需要处理 IOException 异常和ClassNotFoundException 异常。IOException 可能会在文件操作中抛出,比如文件找不到或无法读写。ClassNotFoundException 可能会在反序列化的过程中抛出,当类的定义在反序列化时不可用时,就会引发此异常。

总结:

- 对象的序列化是将对象转换成字节流的过程,反序列化则是将字节流转换回对象的过程。

- 在Java中,实现序列化需要实现 Serializable 接口,并使用 ObjectOutputStream 进行序列化,使用 ObjectInputStream 进行反序列化。

- 序列化时可能会抛出 IOException 异常,反序列化时可能会抛出 IOException 和 ClassNotFoundException 异常,需要对异常进行处理。

- 序列化后的字节流可以存储到文件中、传输到网络或持久化到数据库中。