Tho*_*den 7 java rmi serializable
我需要为我的分布式系统类开发Java RMI应用程序.
在讲座期间,教授强调只让类实现Serializable,必须通过网络传递价值.
这意味着让太多的类实现Serializable会有一些缺点或惩罚.不需要通过网络发送的类.
我不知道如果你从未真正通过网络发送序列化/反序列化将永远不会发生任何缺点.
只允许类实现必须通过网络传递值的Serializable.
您的教授建议您尽量减少Serializable
对严格需要的区域的使用.
这是因为序列化是泄漏实现的有力候选者.实现Serializable
显示了序列化的意图(即使对象从未实际被序列化),这强加了开发人员在修改这些类时要小心以避免破坏软件的想法.
Joshua Bloch在他的" Effective Java"一书中介绍了这一点.
序列化对象的那一刻,如果没有特殊处理,就无法再修改它实例化的类†.如果修改类,则二进制表示将不再与已序列化的对象匹配.因此,在修改类之前序列化的任何对象的反序列化将失败.
如果类型实现Serializable
,则它有可能被序列化.如果序列化了该类型的实例,则可以通过修改代码的实现来中断代码.
由于没有简单的方法可以确定序列化类型的实例已被序列化(虽然您可能不打算将对象序列化),但开发人员在修改这些类型的实现时会非常谨慎.
† - 通过正确版本化可序列化类型可以避免这种情况,但由于版本控制没有合同更改的类型(没有编译时错误处理支持来通知您),最好将显式版本保持最小化以避免添加你的设计过于复杂.
不必要地实现 Serialized 会受到什么惩罚?
不必要的实施不会受到惩罚Serializable
。如果您从不序列化该对象,那么仅仅因为您添加了implements Serializable
. 如果你序列化它,它会起作用而不是失败。这不是惩罚。
为什么教授强调这一点是一个谜。问他。除了序列化之外没有任何开销,并且如果您通过 RMI 按值传递对象,则除了实现之外别无选择Serializable
,因此没有什么可以评估开销。这是没有意义的。
归档时间: |
|
查看次数: |
384 次 |
最近记录: |