瞬态变量有什么用?

时间:2011-05-11 06:44:39

标签: java serialization transient

  

可能重复:
  Why does Java have transient variables?

transient关键字将用于防止特定变量的序列化。但为什么我们不应该序列化数据呢?有内在安全吗?

4 个答案:

答案 0 :(得分:13)

某些类本身不可序列化,因为它们代表管理Java环境之外的资源。例如,FileOutputStream无法真正序列化,因为它代表一个打开的文件句柄。对于Socket也是如此:您无法保存和恢复“打开套接字”。

如果要序列化某个具有该类型字段的对象,则必须将这些字段标记为瞬态。

使用transient的另一个原因是您的类执行某种内部缓存。例如,如果您的类可以进行计算并且出于性能原因它会缓存每次计算的结果,那么可能不需要保存该缓存(因为重新计算它可能比恢复它更快,或者因为旧的缓存值不太可能任何用途)。在这种情况下,您将缓存字段标记为瞬态。

答案 1 :(得分:4)

是的,它可以与安全性相关,但原因还可能是该字段中的数据来自其他字段,并且在这种情况下没有理由发送它。如果可以,请节省带宽:)

答案 2 :(得分:0)

如果您不想序列化任何变量/字段,请将其标记为瞬态。银行余额,信用卡详细信息等,如果我们序列化,然后有人可以反序列化并使用它。

答案 3 :(得分:0)

考虑将用户名和密码作为其字段之一的类。还要考虑在序列化后在网络中传递此对象,并在其他地方反序列化它。

在这样的场景中,瞬态会有所帮助