Java对象的选择性序列化

时间:2016-01-11 17:55:46

标签: java core

考虑一下我的java类中有10个字段的情况。我想要的是,对其中的一些(例如3)做一些特殊的处理,其余的字段通过默认的ObjectOutputStream实现被序列化。有没有办法实现这个目标?

我可以在我的类中提供writeObject(ObjectOutputStream os)的实现来专门处理这3个字段,但是如何默认其余的字段。

感谢

1 个答案:

答案 0 :(得分:3)

您可以执行以下操作:

  • 将三个特殊字段声明为瞬态
  • 实施writeObject(ObjectOutputStream out)并使用此方法:
  • 使用ObjectOutputStream.defaultWriteObject()以默认方式编写所有其他字段
  • 然后为特殊字段添加自定义序列号

并添加模拟实现以读取对象。

public class MyClass implements Serializable
{
    private void writeObject(java.io.ObjectOutputStream out) throws IOException
    {
        out.defaultWriteObject();
        // add code to write the special fields
    }

    private void readObject(java.io.ObjectInputStream in) throws IOException
    {
        in.defaultReadObject();
        // add code to read the special fields
    }

    private transient int special1;
    ...
}