序列化和反序列化是数据处理中的两个相对的概念,通常用于对象的存储和传输。下面是对这两个过程的对比分析:
为了演示序列化和反序列化过程,我将使用Java编写一个简单的示例。在这个例子中,我们将创建一个Student
类,然后创建一个列表来保存十个学生信息。接着,我们将这个列表序列化到一个文件中,并从该文件中反序列化它,恢复学生信息的列表。
Student
类首先,我们定义一个Student
类,它实现了Serializable
接口以支持序列化。
import java.io.Serializable;
public class Student implements Serializable {
private static final long serialVersionUID = 1L;
private String name;
private int age;
private String id;
public Student(String name, int age, String id) {
this.name = name;
this.age = age;
this.id = id;
}
// 省略getter和setter方法
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", age=" + age +
", id='" + id + '\'' +
'}';
}
}
接下来,我们创建一个包含十个学生信息的列表,并将这个列表序列化到一个文件中。
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.util.ArrayList;
import java.util.List;
public class SerializeDemo {
public static void main(String[] args) {
List<Student> students = new ArrayList<>();
for (int i = 1; i <= 10; i++) {
students.add(new Student("Student" + i, 20 + i, "ID" + i));
}
try (ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("students.dat"))) {
out.writeObject(students);
System.out.println("Students have been serialized");
} catch (IOException e) {
e.printStackTrace();
}
}
}
最后,我们从文件中读取数据,并将其反序列化回学生列表。
import java.io.FileInputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.util.List;
public class DeserializeDemo {
public static void main(String[] args) {
try (ObjectInputStream in = new ObjectInputStream(new FileInputStream("students.dat"))) {
List<Student> students = (List<Student>) in.readObject();
for (Student student : students) {
System.out.println(student);
}
} catch (IOException | ClassNotFoundException e) {
e.printStackTrace();
}
}
}
students.dat
文件不存在,因此在序列化过程中会创建它。students.dat
文件不存在或者其内容被篡改,可能会抛出异常。这个例子展示了Java序列化和反序列化的基本用法,通过这种方式,可以轻松地将对象的状态保存到文件中,并在需要时恢复它们。
网络安全资料录制不易,大家记得一键三连呀,点赞、私信、收藏!!