仅反序列化Java中的必填字段

时间:2016-03-23 13:26:54

标签: java serialization deserialization

要序列化的测试类如下:

 public Class Test implements Serializable {
      private static final long serialVersionUID = GENERATED_LONG_VALUE;
      private int val;
      private SomeClass_1 val_1;
      private SomeClass_2 val_2;
      private SomeClass_3 val_3;
      // getter and setter for above
  }

我已将上面类的Object序列化为表中的BLOB。

现在,在反序列化时,我只想要valval_1。 所以我在Test类中覆盖了readObject()方法,如下所示。

    private void readObject(java.io.ObjectInputStream stream)
        throws IOException, ClassNotFoundException {

        this.val = (int) stream.readObject();
        this.val_1 = (SomeClass_1) stream.readObject();
    }

但在此之后,stream.readObject()val_3正在进行val_4。即使我没有在val_3中阅读val_4stream.readObject(),我也不明白为什么会这样。

PS 我正在对server X进行序列化,而在server Y进行反序列化,类结构与server Y server X完全相同。

1 个答案:

答案 0 :(得分:2)

如果一个Server X要求将对象的所有成员传递给它,但是服务器Y没有,那么您可能希望:

  1. 查看Externalization。这使您可以完全控制编组和解组,这看起来就像您需要的那样。

  2. 向服务器发送不同的proxy objects:一个用于序列化所有字段,另一个用于序列化所有字段。您可以为要发送到服务器的数据创建代理,传入要发送的对象。一个代理使用transient,另一个不使用。

  3. 不要发送对象,而不是重建另一侧对象所需的数据。如果您要发送的对象不需要太多数据,这可以减轻网络压力。