序列化(ObjectOutputStream) & 反序列化(ObjectInputStream)
Java的序列化和反序列化是用于将对象转换为字节流的过程,以便在网络上传输或保存到磁盘,然后将这些字节流再转换回对象。这个过程是Java中处理对象持久化和传输的常见方法。
序列化是将对象的状态转换为字节流的过程。这个字节流可以被保存到文件、发送到网络,或者其他存储介质中。序列化使得对象可以被持久化,以便在未来重新创建该对象。
反序列化是将字节流转换回对象的过程。它是序列化的逆过程,通过读取字节流并重建原来的对象。
- 序列化:
内存(Java对象) → 流(二进制的字节序列)
将对象的状态写入到特定的流中的过程 - 反序列化:
流(二进制的字节序列) → 内存(Java对象)
从特定的流中获取数据重新构建对象的过程
在Java中,序列化通过实现 java.io.Serializable
接口来实现。Serializable
接口是一个标记接口,没有任何方法。其存在的意义是告诉Java虚拟机(JVM)某个类的对象可以被序列化。
流之间的关系概述
OutputStream
==> ObjectOutputStream(OutputStream)
==> FileOutputStream
InputStream
==> ObjectInputStream(InputStream)
==> FileInputStream
// Student 类需要实现 Serializable 接口
class Student implements java.io.Serializable {
private static final long serialVersionUID = 1L;
private String name;
private Integer age;
public Student(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "Student{name='" + name + "', age=" + age + "}";
}
}
public class ObjectTest {
public static void main(String[] args) {
ObjectOutputStream oos = null;
ObjectInputStream ois = null;
try {
// 序列化
oos = new ObjectOutputStream(new FileOutputStream("D:\\1.txt"));
Student student = new Student("张三", 17);
oos.writeObject(student); // 写入对象
System.out.println("写入成功!!!");
// 反序列化
ois = new ObjectInputStream(new FileInputStream("D:\\1.txt"));
Student stu = (Student) ois.readObject();
System.out.println(stu.toString());
} catch (Exception e) {
throw new RuntimeException(e);
} finally {
// 释放资源
try {
if (oos != null) oos.close();
if (ois != null) ois.close();
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}
}
序列化的步骤
实现Serializable接口;创建对象输出流;调用 writeObject()
方法将对象写入文件;关闭对象输出流
使用集合保存对象,可以将集合中的所有对象序列化
反序列化的步骤
实现Serializable接口;创建对象输入流;调用 readObject()
方法读取对象;关闭对象输入流
标签:Java,IO,对象,Student,new,序列化,字节 From: https://blog.csdn.net/m0_66584716/article/details/142099709如果向文件中使用序列化机制写入多个对象,那么反序列化恢复对象时,必须按照写入的顺序读取