序列化
:是将对象转化为字节流或者其他格式的过程,以便能够在网络上传输或者保存到磁盘上。
反序列化
:则是将序列化的字节流或者其他格式转化为对象的过程。
在Java中,用于序列化和反序列化对象的主要类包括以下几个:
-
java.io.Serializable
接口:作为标记接口使用,被实现的类表明其对象是可序列化的。 -
java.io.ObjectOutputStream
类:用于将对象序列化为字节流的输出流。它提供了一系列的write
方法来写入不同类型的数据。 -
java.io.ObjectInputStream
类:用于将字节流反序列化为对象的输入流。它提供了一系列的read
方法来读取不同类型的数据。
这些类可以与其他的输入输出流类(如文件流、网络流等)配合使用来进行对象的序列化和反序列化。
以下是一个简单的例子,展示了如何使用序列化和反序列化类:
import java.io.*;
public class SerializationExample {
public static void main(String[] args) {
// 序列化对象
try {
MyObject obj = new MyObject("Hello, serialization!");
FileOutputStream fileOut = new FileOutputStream("object.ser");
ObjectOutputStream out = new ObjectOutputStream(fileOut);
out.writeObject(obj);
out.close();
fileOut.close();
System.out.println("对象已序列化并保存到object.ser文件");
} catch(IOException e) {
e.printStackTrace();
}
// 反序列化对象
try {
FileInputStream fileIn = new FileInputStream("object.ser");
ObjectInputStream in = new ObjectInputStream(fileIn);
MyObject obj = (MyObject) in.readObject();
in.close();
fileIn.close();
System.out.println("对象已从object.ser文件中反序列化: " + obj.getMessage());
} catch(IOException | ClassNotFoundException e) {
e.printStackTrace();
}
}
}
class MyObject implements Serializable {
private String message;
public MyObject(String message) {
this.message = message;
}
public String getMessage() {
return message;
}
}
在上述示例中,MyObject
类实现了Serializable
接口,使得其对象可以被序列化。通过ObjectOutputStream
将MyObject
对象序列化为字节流,并保存到object.ser
文件中。然后,通过ObjectInputStream
读取object.ser
文件中的字节流,并将其反序列化为MyObject
对象。通过调用getMessage()
方法,我们可以获取反序列化后的对象中的消息内容。