在Java中,对象序列化是指将对象的状态转换为字节序列的过程,这使得对象可以被存储或者通过网络传输。对象序列化主要通过实现 java.io.Serializable 接口来完成。这是一个标记接口,它不包含任何方法,仅用于标识类的对象可以被序列化。
具体的序列化过程通常如下:
- 实现Serializable接口: 要使Java类可序列化,类必须实现
java.io.Serializable接口。 - ObjectOutputStream: 使用
ObjectOutputStream类将对象写入流中。这个类有一个writeObject()方法,用于序列化指定的对象并将其输出到输出流中。 - 序列化过程: 当通过
writeObject()方法写入对象时,Java虚拟机(JVM)首先检查该对象是否已经被序列化过。如果没有,JVM将记录该对象的类型和状态(即其成员变量的值),然后递归地对该对象的所有引用进行相同处理。 - transient关键字: 如果不希望某个字段被序列化,可以使用
transient关键字来修饰该字段。被transient修饰的字段在对象序列化时会被忽略。 - UID: 在类中声明一个名为
serialVersionUID的静态常量可以用来显式定义序列化版本UID。这有助于确保序列化的兼容性,即在类定义变化时仍然能够对老版本的序列化对象进行反序列化。
反序列化是上述过程的逆过程,主要通过使用 ObjectInputStream 类和其 readObject() 方法来实现,将字节序列恢复为Java对象。