要序列化的测试类如下:
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
}
我已将上述类的对象序列化为表中的 BLOB。
现在,在反序列化时,我只需要 val
和 val_1
。
所以我在测试类中重写了 readObject() 方法,如下所示。
private void readObject(java.io.ObjectInputStream stream)
throws IOException, ClassNotFoundException {
this.val = (int) stream.readObject();
this.val_1 = (SomeClass_1) stream.readObject();
}
但在此之后,它正在为 val_3
和 val_4
执行 stream.readObject()
。即使我没有在 stream.readObject()
中读取 val_3
和 val_4
,我也不明白为什么会发生这种情况。
P.S.我正在服务器X
上进行序列化,而在服务器Y
上对其进行反序列化,并且类结构在服务器上完全相同Y
就像服务器 X
。
最佳答案
如果一台服务器 X 要求将对象的所有成员传递给它,但服务器 Y 不需要,您可能需要:
查看Externalization 。这使您可以完全控制编码和解编码,这似乎正是您所需要的。
向服务器发送不同的 proxy objects :一种对所有字段进行序列化,另一种则不序列化。您可以为要发送到服务器的数据创建代理,并传入要发送的对象。一个代理使用
transient
,另一个则不使用。不要发送对象,而不是在另一端发送重建对象所需的数据。如果您要发送的对象不需要太多数据,这可以减轻网络压力。
关于java - 仅反序列化 Java 中必需的字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36179491/