gpt4 book ai didi

java - 仅反序列化 Java 中必需的字段

转载 作者:行者123 更新时间:2023-11-30 03:00:19 25 4
gpt4 key购买 nike

要序列化的测试类如下:

 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。

现在,在反序列化时,我只需要 valval_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_3val_4 执行 stream.readObject() 。即使我没有在 stream.readObject() 中读取 val_3val_4,我也不明白为什么会发生这种情况。

P.S.我正在服务器X上进行序列化,而在服务器Y上对其进行反序列化,并且类结构在服务器上完全相同Y 就像服务器 X

最佳答案

如果一台服务器 X 要求将对象的所有成员传递给它,但服务器 Y 不需要,您可能需要:

  1. 查看Externalization 。这使您可以完全控制编码和解编码,这似乎正是您所需要的。

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

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

关于java - 仅反序列化 Java 中必需的字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36179491/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com