查看服务器日志 我在某些 RMI 缓存传输函数期间遇到了域对象的 NotSerializableException
。我注意到域对象没有实现 Serializable
接口(interface);但是我对实现 Serializable
有点怀疑,因为我不知道它可能的副作用。它会在某个时候破裂吗?
如果没有副作用,为什么所有的对象都不能自己Serializable
?
最佳答案
实现 Serializable
没有副作用...除了使序列化机制考虑序列化的明显副作用。
(当然,您实现
Serializable
接口(interface)的事实并不一定意味着序列化会起作用。例如,如果您的类具有实例字段不可序列化,并且这些字段未声明为 transient
,那么正常的序列化机制将失败。)
If there are no side effects why all the objects are not Serializable by their own?
一个原因是某些对象的状态无法通过序列化来捕获和表示。示例包括连接到 JVM、Java 线程和 Java 进程之外的数据源或接收器的各种流。
第二个原因是(可以说)程序员应该决定将类序列化是否合适。它可能不合适的示例包括包含敏感信息的类或内部结构容易更改的类……使反序列化成为问题1。
1 - 可以在一定程度上处理这个问题,但程序员可能想说“我不想被迫处理这个问题”......对于他/她认为不应该连载。
关于java - 使用 Serializable 的副作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24861218/