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

标签 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
  }

我已将上述类的对象序列化为表中的 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/

相关文章:

c# - 如何使用 Newtonsoft 反序列化可以是数组或字典的对象?

java - 从 SQL 查询检索时保留在列表中的顺序

java - Hibernate用户更新删除用户角色

java - ruby 和鸭子打字: design by contract impossible?

c - 协议(protocol)消息反序列化不当

c# - 为什么我的代码中的 protobuf-net 反序列化器比流读取 csv 慢得多

java - 在 Java 循环中声明重复变量

java - 错误 : Class declares multiple JSON fields named serialVersionUid

python - Django Rest Framework 序列化程序不显示所有字段

c# - 数组的反序列化总是给出一个空数组