Java序列化是指将一个对象的状态信息转换为字节流,以便于将其存储到内存、文件或数据库中,或者通过网络进行传输,从而跨时间、跨空间共享对象的状态。这个过程称为序列化,它可以将对象转化为二进制,用于保存或网络传输。反序列化则是将字节流恢复为对象的过程。
要实现序列化,需要让类实现Serializable接口,这个接口本身并没有需要实现的方法,它只是为了标注该对象是可被序列化的。然后可以使用一个输出流来构造一个ObjectOutputStream对象,使用ObjectOutputStream对象的writeObject(Object obj)方法就可以将参数为obj的对象写出(即保存其状态)。如果要恢复对象的状态,可以使用输入流。
以下是一个简单的Java序列化的例子:
首先,我们创建一个可序列化的类。为了使一个Java类可序列化,我们需要让其实现java.io.Serializable接口,并给它一个serialVersionUID。
import java.io.Serializable;
public class Person implements Serializable { private static final long serialVersionUID = 1L;
private String name;
private int age;
public Person(String name, int age) { this.name = name;
this.age = age; }
// getters and setters
// … @Override
public String toString() {
return “Person [name=” + name + “, age=” + age + “]”; }}
然后,我们进行序列化和反序列化操作:import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
public class SerializeDemo {
public static void main(String[] args) { Person p = new Person(“John”, 30);
try { // 序列化 FileOutputStream fileOut = new FileOutputStream("./person.ser"); ObjectOutputStream out = new ObjectOutputStream(fileOut); out.writeObject§;
out.close();
fileOut.close(); System.out.printf(“Serialized data is saved in ./person.ser”);
} catch (IOException i) { i.printStackTrace();
} // 反序列化
try { FileInputStream fileIn = new FileInputStream("./person.ser"); ObjectInputStream in = new ObjectInputStream(fileIn);
Person p1 = (Person) in.readObject(); in.close();
fileIn.close(); System.out.println(“Deserialized Person…”); System.out.println(p1);
} catch (IOException i) { i.printStackTrace();
return; } catch (ClassNotFoundException c) { System.out.println(“Person class not found”); c.printStackTrace();
return;
}
}}
这个例子中,我们首先创建了一个Person对象,并将其序列化到文件person.ser中。然后我们从该文件中反序列化Person对象。