.class文件为每种类型的对象提供蓝图,Java具有丰富的功能,用于提取对象的属性,包括其所有状态。 那么为什么我们仍然需要实现serializable,我们可以自动序列化给定.class文件吗?
答案 0 :(得分:3)
Serializable
接口是Marker接口,其中没有方法或字段。它只是由我们可能想要序列化的对象类实现的。
此外,序列化是一项代价高昂的事情,因为(摘自Effective Java第2版):
实施Serializable的主要成本是降低了灵活性 一旦它被释放就改变一个类的实现。当a class实现Serializable,它的字节流编码(或序列化形式) 成为其导出的API的一部分。一旦你广泛分发课程,你通常会 必须按照您的要求永远支持序列化表单 支持导出的API的所有其他部分。
实施Serializable的第二个成本是它增加了可能性 错误和安全漏洞。
实施Serializable的第三个成本是它增加了测试 与发布新版本的类相关的负担。当可序列化时 修改了类,重要的是检查是否可以序列化实例 新版本并在旧版本中反序列化,反之亦然。
答案 1 :(得分:0)
Serializable只是一个标记界面;您不需要提供任何实现。 Java将提供适用于大多数情况的合理默认实现。
答案 2 :(得分:0)
鉴于一个对象可以引用其他一些对象,序列化该类会变得非常有趣。序列化一个对象可能导致数千个对象被序列化。结果可以毫不费力和精彩,但99.9%的时间你想要控制并限制至少一部分操作。当您通过长期打开的套接字移动类实例时尤其如此。
因此,标记“Serializable”类是指您已经考虑过所有分支。这些可能是微不足道的,也可能是巨大而复杂的。但请注意:将一个类实例写入流可以导致序列化已知宇宙的一半。