使用new()方法实现对象的序列化与反序列化
对象的序列化是指将对象转换成字节流的过程,以便于在网络传输或存储到本地文件中。反序列化则是将字节流转换回对象的过程。在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 异常,需要对异常进行处理。
- 序列化后的字节流可以存储到文件中、传输到网络或持久化到数据库中。
