在 Java 中,**序列化(Serialization)**是指把对象转换成字节流,便于存储或网络传输;反序列化则是把字节流恢复成对象。
下面从基本用法 → 注意事项 → 常见方式系统讲一下。
Serializable 接口import java.io.Serializable;
public class User implements Serializable {
private static final long serialVersionUID = 1L;
private String name;
private int age;
// 构造方法、getter、setter
}
✅ Serializable 是标记接口,不需要实现任何方法
✅ serialVersionUID 建议显式声明,防止类结构变化导致反序列化失败
ObjectOutputStream oos =
new ObjectOutputStream(new FileOutputStream("user.txt"));
oos.writeObject(user);
oos.close();
ObjectInputStream ois =
new ObjectInputStream(new FileInputStream("user.txt"));
User user = (User) ois.readObject();
ois.close();
private transient String password;
transient 修饰的字段不会被序列化。
private void writeObject(ObjectOutputStream oos) throws IOException {
oos.defaultWriteObject();
oos.writeUTF(encrypt(password));
}
private void readObject(ObjectInputStream ois)
throws IOException, ClassNotFoundException {
ois.defaultReadObject();
password = decrypt(ois.readUTF());
}
| 方式 | 特点 | 使用场景 |
|---|---|---|
| Java 原生序列化 | JDK 自带,简单 | Java 内部通信 |
| JSON(Jackson / Gson) | 可读性好,跨语言 | Web / 前后端 |
| Protobuf | 高性能、小体积 | RPC / 大数据 |
| Hessian | 跨语言、二进制 | 分布式服务 |
ObjectMapper mapper = new ObjectMapper();
String json = mapper.writeValueAsString(user);
User u = mapper.readValue(json, User.class);
如果你愿意,我可以:
你想看哪一个?
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。