要序列化的测试类如下:
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。
现在,在反序列化时,我只想要val
和val_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_4
和stream.readObject()
,我也不明白为什么会这样。
PS 我正在对server X
进行序列化,而在server Y
进行反序列化,类结构与server Y
server X
完全相同。
答案 0 :(得分:2)
如果一个Server X要求将对象的所有成员传递给它,但是服务器Y没有,那么您可能希望:
查看Externalization。这使您可以完全控制编组和解组,这看起来就像您需要的那样。
向服务器发送不同的proxy objects:一个用于序列化所有字段,另一个用于序列化所有字段。您可以为要发送到服务器的数据创建代理,传入要发送的对象。一个代理使用transient
,另一个不使用。
不要发送对象,而不是重建另一侧对象所需的数据。如果您要发送的对象不需要太多数据,这可以减轻网络压力。