防止父类Java的序列化

时间:2017-07-09 07:05:02

标签: java serialization

有没有办法阻止父类序列化?

当我们对子类进行序列化时,直到父类执行序列化。

我可以限制父类的序列化并序列化我正在处理的唯一子类吗?

2 个答案:

答案 0 :(得分:3)

是可能的。只需将您的类声明为implements Externalizable并在writeExternal()方法中准确写出您需要的内容,注意不要从超类中序列化任何内容,并在readExternal()方法中准确读取。 / p>

或者,只需实现Serializable并提供您自己的readObject()/writeObject()方法,再次注意不要从超类中序列化任何内容,在这种情况下也不要调用{{ 1}}或defaultWriteObject()

在这两种情况下,当前类数据的实际序列化完全取决于您。

答案 1 :(得分:0)

虽然在技术上可以自行微调每个级别的继承 - 甚至在排除超类字段的范围内 - 你可能想退一步。

基本上有两种情况:

  1. 超类没有任何字段/状态。那么你无论如何都无法排除。
  2. 超类具有状态,由该类的字段表示。
  3. 那么您如何看待有意义地解决第二部分?您会看到在没有超类字段数据的情况下允许反序列化时 - 这意味着您可能需要进行大量额外测试。确保超类方法不会抛出异常 - 因为所有突然的字段都是null而不是被初始化。

    换句话说:有可能"遗漏"所有这些值 - 您正在创建行为完全不同的对象。你准备好处理它的所有影响了吗?

    Meanung:跳过超类字段要求您干扰序列化代码。它可能需要大量额外的测试工作。你获得了什么?在运行时传输的数据少了几个字节。

    除此之外:具有4个级别的无内容层次结构的目的是什么 - 但是超级状态是无关紧要的?

    所以我的答案是:仔细考虑你的想法是否真的是解决潜在要求的最佳OO设计。