简体   繁体   English

在Java中仅反序列化必需字段

[英]Deserializing only required fields in Java

Test Class to serialize is as follows: 要序列化的测试类如下:

 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
  }

I have serialized Object of above class as BLOB in table. 我在表中将上述类的对象序列化为BLOB。

Now while deserializing I just want val and val_1 . 现在在反序列化时,我只需要valval_1 So I have overrided readObject() method in Test class like below. 所以我在下面的Test类中重写了readObject()方法。

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

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

But after this also, It is doing stream.readObject() for val_3 and val_4 . 但是在此之后,它还在为val_3val_4stream.readObject() I am not understanding why it is happening even I am not reading val_3 and val_4 in stream.readObject() . 我不明白为什么会发生,即使我没有在stream.readObject()读取val_3val_4

PS I am doing serialization on server X , While deserializing it at server Y and class Structure is exactly same at server Y like server X . PS我正在server X上进行序列化,而在server Y对其进行反序列化,并且类server Yserver Yserver X完全相同。

If one Server X requires all members of the object to be passed to it, but Server Y doesn't, you might want to: 如果一台服务器X要求将对象的所有成员都传递给它,而服务器Y则不需要,则可能需要:

  1. Look into Externalization . 研究外在化 This gives you full control of marshalling and unmarshalling, which seems like what you need. 这使您可以完全控制编组和解组,这似乎是您所需要的。

  2. Send the servers different proxy objects : One which serializes all fields, and one that doesn't. 向服务器发送不同的代理对象 :一个对所有字段进行序列化,另一个对不进行序列化。 You could create a proxy for data that is to be sent to the servers, passing in the object you want to send. 您可以为要发送到服务器的数据创建代理,并传入要发送的对象。 One proxy uses transient , the other doesnt. 一个代理使用transient ,另一个不使用。

  3. Don't send objects, rather than data required to reconstruct the objects on the other side. 不要发送对象,而不是发送在另一侧重建对象所需的数据。 This relieves stress on the network if the objects you want to send over don't require much data. 如果您要发送的对象不需要太多数据,这可以减轻网络的压力。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM