【问题标题】:What is use of making classes serializable?使类可序列化有什么用?
【发布时间】:2016-06-06 03:06:27
【问题描述】:
  1. 我注意到许多库类“ArrayList”、“String”甚至例外都具有serialVersionUID。为什么他们会变成这样。这样做有什么实际用途。仅供参考,我熟悉序列化的概念。请指出它的实际用途。

查找 ClassCastException 的 serialversionUid 供您参考

public class ClassCastException extends RuntimeException {
private static final long serialVersionUID = -9223365651070458532L;

这些对象的状态会持续到哪里?这些对象的状态将被检索到哪里?

  1. 我目前在一个项目中工作,我们正在制作 REST 控制器,其输入和输出参数将为 JSON。我们正在为 i/p 和 o/p 参数创建简单的 POJO。我看到人们使这些 POJO 可序列化。什么这样做的意义何在?

但我还没有看到**out.readObject**out.writeobject 用于写入和读取对象的状态。POJO 的状态是否会持续存在,只是使其可序列化?如果是,它将存储在哪里?

【问题讨论】:

  • POJO 的状态是否会持续存在,只是使其可序列化? 不,它是可持久的。 如果是,它将存储在哪里?无论您将它存储在哪里。
  • "请指出它的实际用途。" ——以便它们可以被序列化?比如存储在一个文件中,或者使用RMI通过网络传输等等。
  • 在我的第二个 qs 中,POJO 只是可序列化的。没有写任何东西来坚持它。我在 qs 中提到了这一点。所以它不会自动持续存在。对吧?如果可以的话,请回答我的两个问题。
  • @LouisWasserman 您缺少 OP 点/困惑。将Serializable 添加到类使其有资格进行序列化,Java 运行时提供默认的序列化策略。但是,它不会在不编写进一步代码的情况下序列化对象。您仍然需要实际调用 ObjectOutputStream.writeObject(Object obj) 才能进行序列化。
  • @Andreas 我不同意你对 OP 的阅读;在我看来,他们并不理解 Java 运行时提供了默认的序列化策略。

标签: java json rest serialization pojo


【解决方案1】:

如果您想了解完整的故事,请阅读规范:Java Object Serialization Specification

[...] 许多库类“ArrayList”、“String”甚至例外都具有 serialVersionUID。他们为什么会这样。

在读取以旧版本类编写的对象时支持向后兼容性。见Stream Unique Identifiers

这些对象的状态会持续到哪里?

无论您在哪里决定。见Writing to an Object Stream

这些对象的状态将被检索到哪里?

无论你把它放在哪里。见Reading from an Object Stream

[...] 输入和输出参数将是 JSON。 [...] 我见过人们使这些 POJO 可序列化。这样做有什么意义?

没有。 JSON 没有使用 Java 序列化。 Java 序列化创建一个二进制流。 JSON 创建文本。

POJO 的状态是否会持续存在,只是使其可序列化?如果是,它将存储在哪里?

不,见上文。

【讨论】:

    猜你喜欢
    • 2011-10-31
    • 1970-01-01
    • 1970-01-01
    • 2013-05-26
    • 2010-12-27
    • 2019-07-25
    • 1970-01-01
    • 2013-12-30
    • 2011-05-03
    相关资源
    最近更新 更多