深入理解Java序列化
· 阅读需 13 分钟
所谓序列化,就是将对象转为字节流,而反序列化则是将字节流还原为对象。
序列化可以将对象的字节序列持久化——保存在内存、文件、数据库中,在网络上传送对象的字节序列,或者用于 RMI
(远程方法调用)。
例子
首先来看一个简单的例子。定义一个 User 类,并实现 Serializable
接口。
package top.jlice.demo;
import java.io.*;
class User implements Serializable {
private static final long serialVersionUID = 1L;
private String name;
private int age;
public User(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
public class SerializableDemo {
public static void main(String[] args) {
User user = new User("jlice", 25);
try {
ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("data.dat"));
out.writeObject(user);
out.close();
} catch (IOException e) {
e.printStackTrace();
}
try {
ObjectInputStream in = new ObjectInputStream(new FileInputStream("data.dat"));
User obj = (User) in.readObject();
System.out.println(obj.getName() + "\t" + obj.getAge());
} catch (IOException | ClassNotFoundException e) {
e.printStackTrace();
}
}
}
输出:
jlice 25
在主函数中,通过ObjectOutputStream
进行对象的序列化,通过ObjectInputStream
进行对象的反序列化。