Java 序列化(把对象转成字节流,方便存储或传输)并不是“万能方案”,但在一些特定场景下确实比较合适。下面按常见使用场景 + 原因 + 注意点来说明。
典型场景
原因
ObjectOutputStream / ObjectInputStream 一行代码搞定举例
// 服务端
ObjectOutputStream oos = new ObjectOutputStream(socket.getOutputStream());
oos.writeObject(user);
// 客户端
ObjectInputStream ois = new ObjectInputStream(socket.getInputStream());
User user = (User) ois.readObject();
✅ 适合:Java ↔ Java
❌ 不适合:跨语言
典型场景
原因
举例
// 存
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("user.dat"));
oos.writeObject(user);
// 读
ObjectInputStream ois = new ObjectInputStream(new FileInputStream("user.dat"));
User user = (User) ois.readObject();
⚠️ 注意:
serialVersionUID典型场景
原因
| 场景 | 更推荐方案 |
|---|---|
| 跨语言(Java + Go + Python) | JSON / Protobuf / MessagePack |
| 高性能 RPC | Protobuf / Kryo / Hessian |
| 大数据量 | 二进制协议 |
| 长期存储 | JSON / XML / DB |
| Web 接口 | JSON |
原因
class User implements Serializable {
private static final long serialVersionUID = 1L;
private String name;
}
✅ 要求:
SerializableserialVersionUIDtransient)Java 序列化适合:Java 系统内部、简单场景、不追求性能和跨语言的情况。
如果你愿意,我可以:
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。