Java序列化是指将一个Java对象转换为一个字节序列,以便将其保存到文件中或通过网络传输到其他计算机。Java反序列化是指将字节序列转换回Java对象。
Java中实现序列化和反序列化的核心类是ObjectOutputStream和ObjectInputStream。ObjectOutputStream提供了一个方法,可以将Java对象写入输出流中。ObjectInputStream提供了一个方法,可以从输入流中读取Java对象。
为了使Java对象可序列化,必须在类定义中添加一个特殊的标记接口Serializable。这个接口没有任何方法,它只是指示这个类可以被序列化。
以下是一个简单的例子,展示了如何将一个对象序列化到文件中,然后从文件中反序列化回来:
import java.io.*;
public class SerializationExample {
public static void main(String[] args) {
// Create an object to be serialized
MyClass object = new MyClass("Hello", 123);
// Serialize the object to a file
try (FileOutputStream fos = new FileOutputStream("file.ser");
ObjectOutputStream oos = new ObjectOutputStream(fos)) {
oos.writeObject(object);
} catch (IOException e) {
e.printStackTrace();
}
// Deserialize the object from the file
try (FileInputStream fis = new FileInputStream("file.ser");
ObjectInputStream ois = new ObjectInputStream(fis)) {
MyClass deserializedObject = (MyClass) ois.readObject();
System.out.println(deserializedObject);
} catch (IOException | ClassNotFoundException e) {
e.printStackTrace();
}
}
}
class MyClass implements Serializable {
private String message;
private int number;
public MyClass(String message, int number) {
this.message = message;
this.number = number;
}
public String getMessage() {
return message;
}
public int getNumber() {
return number;
}
@Override
public String toString() {
return "MyClass{" +
"message='" + message + '\'' +
", number=" + number +
'}';
}
}
在上面的例子中,MyClass实现了Serializable接口,并将其对象序列化到名为“file.ser”的文件中。然后,我们从文件中反序列化对象,并打印出它的内容。注意,在反序列化对象时,必须将Object类型的返回值强制转换为我们的自定义类型MyClass。