【问题标题】:How to get Transient Variable Original value after deserialization反序列化后如何获取瞬态变量原始值
【发布时间】:2014-10-05 22:53:13
【问题描述】:

使用 Transient 变量,我们可以停止序列化所需的值,但是在反序列化之后,我们会获得瞬态变量的默认值,并且会丢失原始值。那么创建瞬态变量的需要是什么,而不是我们可以跳过创建变量本身。如果可能的话如何获取瞬态变量的原始值。

【问题讨论】:

  • 你的问题没有意义。瞬态关键字用于防止序列化。当您不想序列化变量时使用它。如果你想让它序列化,不要让它瞬态。
  • 我正在创建两个文件,一个用于经理,另一个用于员工。经理也可以看到所有详细信息,例如密码,所以这里我没有使用任何临时值。但是在创建员工文件时,我正在为密码添加瞬态。所以他看不到密码

标签: java serialization deserialization transient


【解决方案1】:

瞬态变量的想法是,以序列化形式保存其原始值没有任何意义,因为在反序列化后它不会处于有效状态(例如,考虑一个成员变量,它包含一个打开Socket)。

在对象反序列化后,瞬态变量应该通过一些方法调用来初始化(例如,如果该成员的getter为空,则可以对其进行初始化)。

【讨论】:

  • 考虑,如果有2个变量A和B在序列化之前都有值,那么A在这里是瞬态的。反序列化后,A 失去了价值,但 B 仍然有。那么A序列化的需要是什么。它在序列化时失去了它的价值,如果在反序列化后需要我们也可以创建A。如果我错了,请纠正我
  • @ADITYAVALLURU 如果您需要序列化 ​​A 的值,请不要将其定义为瞬态的。只有当持久化它没有意义(因为它包含一个在有限时间内有效的值)它应该是暂时的。
【解决方案2】:

至于为什么会有transient关键字的解释? / 瞬态变量有什么用?我喜欢指出这个问题: Why does Java have transient fields?

它巧妙地解释了瞬态变量用于 i.a.出于性能原因,例如预先计算来自存储在对象中的其他值的组合的某些值。您在代码中需要它们,但它们只会在对象被序列化并发送/存储在某处时占用宝贵的空间。
正如 Eran 所提到的,另一种用途是在对象中存储其功能所必需但同时又依赖于底层系统的变量。

至于如何获取瞬态变量的原始值?,没有干净的方法可以做到这一点。特别是如果您在两个应用程序之间进行序列化和对象传输,则没有办法,因为数据只是 不存在

【讨论】:

    【解决方案3】:

    考虑非常基本的场景Person class

    类人{
        私人姓名
        私人 DOB
       私人年龄}

    在这里,存储名称和出生日期是有意义的,但存储Age 并不总是每天都在变化,因此将其声明为transient

    它总是可以计算为Current date - DOB,这将给出准确的年龄。

    【讨论】:

    • 是的,那将会消失,因为存储该变量是没有意义的......所以你需要在需要时重新计算它。
    • 那么瞬态变量有什么用,给变量分配默认值还是不允许变量序列化?如果第一个是正确的,我们也可以手动完成,java不需要创建关键字为了那个权利
    • 查看下方@dot_Sp0T 提供的链接
    • @Aditya 当该字段依赖于其他字段时,我们需要将字段标记为transient。就像在这个例子中一样,Age 字段是由Current date - DOB 计算的。所以坚持一个依赖字段是没有意义的。
    【解决方案4】:

    首先transient 关键字与实例变量一起使用以将它们从序列化过程中排除。如果一个字段是瞬态的,它的值将不会被持久化。

    在Hibernate中可以看到Transient变量的完美使用。 例如,在您的数据库表中,只有两列 (name and surname) 但是在您的 POJO 实体中,您有三个变量 (name , surname and age) 在这种情况下,您可以将 Transient 设置为 age 字段,并且您可以保存您的实体而不会抱怨,因为 age 变量变得瞬态不会持续存在。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-18
      • 2015-10-18
      • 1970-01-01
      • 2020-05-05
      • 1970-01-01
      相关资源
      最近更新 更多