要使用序列化方式创建对象,需要遵循以下步骤:
- 在类中实现Serializable接口。这个接口没有任何方法,只是一个标记接口,用于指示该类可以进行序列化。
- 使用对象输出流(ObjectOutputStream)将对象写入到文件或流中。
- 使用对象输入流(ObjectInputStream)从文件或流中读取序列化的对象
代码如下:
import java.io.Serializable;
public class MyClass implements Serializable {
// 类的成员和方法
}
序列化:
import java.io.FileOutputStream;
import java.io.ObjectOutputStream;
import java.io.IOException;
public class SerializationExample {
public static void main(String[] args) {
MyClass myObject = new MyClass();
try (FileOutputStream fileOut = new FileOutputStream("object.ser");
ObjectOutputStream objectOut = new ObjectOutputStream(fileOut)) {
objectOut.writeObject(myObject);
System.out.println("对象已成功序列化");
} catch (IOException e) {
e.printStackTrace();
}
}
}
反序列化:
import java.io.FileInputStream;
import java.io.ObjectInputStream;
import java.io.IOException;
public class DeserializationExample {
public static void main(String[] args) {
try (FileInputStream fileIn = new FileInputStream("object.ser");
ObjectInputStream objectIn = new ObjectInputStream(fileIn)) {
MyClass myObject = (MyClass) objectIn.readObject();
System.out.println("对象已成功反序列化");
// 使用反序列化后的对象
} catch (IOException | ClassNotFoundException e) {
e.printStackTrace();
}
}
}
需要注意的是,被序列化的类及其所有非瞬态字段(非transient字段)都必须实现Serializable接口。否则,在序列化或反序列化过程中将抛出NotSerializableException。
此外,要成功地进行序列化和反序列化,所涉及的类和字段必须具有一致的类版本。否则,在反序列化过程中可能会抛出InvalidClassException。可以通过显式声明serialVersionUID字段来管理类版本。