我觉得是历史遗留问题。
有的人可能会想到各种理由,比如可以标记哪些类可以被序列化。又或者可以通过UID
来标示反序列化为同一个对象。等等。
但是我觉得最大的问题还是历史遗留问题,在以前,json
还没有成为大家认同的数据结构,所以Java
就设计出了Serializable
的序列化方式来解决对象持久化和对象传输的问题。然后Java
中各种API
就会依赖于这种序列化方式,这么些年过去了,Java
体系的庞大也造成难以改变这个问题,牵一发而动全身。
为什么我这么说呢?
主要有两点依据:
曾经Oracle Java
平台组的架构师说过,删除Java
的序列化机制并且提供给用户可以选择的序列化方式(比如json
)是他们计划中的一部分,因为Java
序列化也造成了很多Java
漏洞。具体可以参见文章:文章
因为在Serializable
类的介绍注释中,明确说到推荐大家选择JSON
和 GSON
库,因为它简洁、易读、高效。
* <h3>Recommended Alternatives</h3>
* <strong>JSON</strong> is concise, human-readable and efficient. Android
* includes both a {@link android.util.JsonReader streaming API} and a {@link
* org.json.JSONObject tree API} to read and write JSON. Use a binding library
* like <a href="http://code.google.com/p/google-gson/">GSON</a> to read and
* write Java objects directly.