代码之家  ›  专栏  ›  技术社区  ›  Pentium10

如何自定义复杂对象的序列化?

  •  2
  • Pentium10  · 技术社区  · 15 年前

    我想做的是,在序列化之前告诉您只有ID被序列化,然后在反序列化之后获取ID并更容易地重构项。

    为了帮助编写代码,我

    setId();
    getId();
    and Load() methods
    

    我想在里面做的对象。

    如何做到这一点?

    2 回复  |  直到 15 年前
        1
  •  4
  •   krock    15 年前

    这是没有意义的 serialize transient 然后在 readObject 方法。例如。:

    private int id;
    private transient java.sql.Connection connection;
    
    private void readObject(ObjectOutputStream out) throws IOException {
        out.defaultReadObject();
        connection = DriverManager.getConnection();
    }
    

        2
  •  2
  •   naikus    15 年前

    看看有效Java(joshuabloch)中关于序列化的第54、55、56和57项。总结

    1. 为您的类创建SerialVersionId(请不要保留为1)
    2. 仔细提供readObject、writeObject
    3. 别忘了在上面两个函数中调用defaultReadObject和defaultWriteObject
    4. 将所有不可序列化的字段标记为临时字段
    5. 标记可与其他字段一起构造的所有字段
    6. 如果您有链表等,请考虑使用自定义序列化表单(项目55)。

    最后,彻底阅读javadoc for Serializable和有效Java的第54-57项,它也会回答你的另一个问题。

    干杯

    推荐文章