【问题标题】:Is there any way to serialize a non-serializable class?有没有办法序列化不可序列化的类?
【发布时间】:2017-05-30 10:25:52
【问题描述】:

我想通过序列化将我的学校对象保存到我的数据库中。问题是我可以更新 School 类并实现可序列化接口,但问题是有太多字段,如 Student、CityInfo 并且它们都不是可序列化的。有没有办法在不更新类的情况下用所有这些字段序列化 School 对象?

public class School{
    private Student student;
    private CityInfo info;
    ....

}

【问题讨论】:

  • 哪种School只有一个Student?为什么要将序列化的 Java 对象存储在无法查询其值的数据库中?
  • @Andreas 它只是一个示例类。我不想查询他们的字段,但我想从另一个 java 应用程序中获取这个对象。有没有办法做到这一点?

标签: java serialization java-7


【解决方案1】:

您必须实现自己的序列化和反序列化方法。

在此处查看“自定义协议”部分。

http://www.oracle.com/technetwork/articles/java/javaserial-1536170.html

【讨论】:

  • 有数百个字段,很难为所有字段实现我自己的序列化和反序列化方法。
【解决方案2】:

就Java字节码序列化而言,如果不自定义序列化过程,这是无法做到的。

正如这里所说:http://www.jguru.com/faq/view.jsp?EID=34802

“当你序列化一个对象时,序列化机制通过链接继承层次结构来工作,依次保存每个可序列化超类的状态。当序列化到达第一个不可序列化超类时,序列化停止。

反序列化时,第一个不可序列化超类的状态不是从流中恢复,而是通过调用该类的无参数构造函数来恢复。如果无参数构造函数不足以满足您的目的,则必须使用 writeObject() 和 readObject() 自定义子类的序列化,以便从不可序列化的超类中写出和恢复您认为必要的任何信息。”

但是,为什么必须使用内置的 Java 序列化?有许多库可以将您的公共字段(以及具有适当的 getter 和 setter 的字段)序列化为 JSON、XML 或其他格式。这还具有使您的数据更便携的额外好处。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-01-13
    • 2019-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多