查看服务器日志我在某些RMI缓存传输功能期间遇到域对象NotSerializableException
。我注意到域对象没有实现Serializable
接口;但我对实施Serializable
持怀疑态度,因为我不知道它可能产生的副作用。它会在某个时候破裂吗?
如果没有副作用,为什么所有对象都不属于Serializable
?
答案 0 :(得分:5)
实现Serializable
没有任何副作用......除了使序列化机制考虑序列化它之外的显而易见的事情。
(当然,implement
Serializable
接口transient
这一事实并不一定意味着序列化将起作用。例如,如果您的类具有不可序列化的实例字段,并且这些字段未声明为{{1}},则正常的序列化机制将失败。)
如果没有副作用,为什么所有对象都不能自行序列化?
一个原因是某些对象具有无法捕获并通过序列化表示的状态。示例包括连接到JVM,Java线程和Java进程外部的数据源或接收器的各种Streams。
第二个原因是(可以说)程序员应该决定是否适当以使类可序列化。可能不合适的示例包括持有敏感信息的类或内部可能发生变化的类......使反序列化成为问题 1 。
1 - 在某种程度上可以处理这个问题,但是程序员可能想说'#34;我不想被迫处理这个问题" ......对于他/她认为不应该序列化的课程。