【Java】类要不要实现serializable有什么决定

也就是说一个对象要不要实现serializable跟它所处的环境所使用的框架有关是吧?

对,就是这个意思。

“对象要不要实现 `Serializable`”完全取决于你打算用哪一套序列化机制/框架,而不是 Java 语法本身强制要求。

---

几种常见场景对照一看就明白:

1. Java 原生 `ObjectOutputStream.writeObject(obj)`

 

   → 框架只认 `instanceof Serializable`,不认就抛 `NotSerializableException`。

 

   典型用途:RMI、JMX、HttpSession 钝化、JDK 自带的内存深拷贝。

 

2. Elasticsearch、Kafka、Hadoop、Spark、Flink、Dubbo、 gRPC-Java、Protostuff、Kryo、Avro、Thrift、Protobuf …

 

   → 全部自定义协议,各自提供接口或注解(`Writeable`、`Serializer<T>`、`Externalizable`、`@Protobuf` 等),根本不看 `Serializable`。

 

   它们有的要求你写 `writeTo/readFrom`,有的帮你自动生成编解码,但共同点:

 

   “只要按照我的规则把字段写进字节流就行,与 `Serializable` 无关”。

 

3. Spring Boot 默认的 HTTP 消息转换器(Jackson JSON)

 

   → 序列化成 JSON,只关心 getter/setter/注解,连 `Serializable` 看都不看。

 

   所以同一个领域对象,放在 Web 层返回 JSON 时不需要 `Serializable`,放到默认的 HttpSession 钝化时就需要;放 Redis 里如果用 JDK 序列化则需要,用 Jackson2JsonRedisSerializer 则不需要。

 

---

 

一句话总结

 

`Serializable` 只是 Java 官方提供的那套“反射+字节流”协议的入场券;

 

离开这套协议(大多数分布式框架都自己造轮子),它就完全用不上。

 

所以“对象要不要实现 `Serializable`”确实取决于它所处的运行环境和所选框架,而不是写 Java 的强制规定。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值